JBOSSAOP学习笔记-依赖注入
2007-12-23 12:24:44 来源:WEB开发网核心提示:依赖注入(Dependency Injection)AOP另外一个有趣的地方就是提供了依赖注入,依赖注入是对象的申明包括信息,JBOSSAOP学习笔记-依赖注入,配置,服务在运行时刻才被自动注入到服务中去, <aop><aspect class="org.jboss.aspects.Inje
依赖注入(Dependency Injection)
AOP另外一个有趣的地方就是提供了依赖注入。依赖注入是对象的申明包括信息,配置,服务
在运行时刻才被自动注入到服务中去,而不是在你的代码中指定。在J2EE中的 javax.transaction.TransactionManager 是很多开发者需要用到的,但起始它是有很多实现的。
不同的框架需要不同的实现。使用AOP的注释来实现选择用那个实现就是一个很好的方法。
首先我们还是要定义一个注释。
package org.jboss.aspects;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target({ElementType.FIELD})
public @interface Inject {}
然后我们实现我们的方面类,这里我们实现的是JBOSS的事务实现,对于不同的服务器提供,你
可以使用不同的实现。
package org.jboss.aspects;
import org.jboss.aop.joinpoint.*;
import java.lang.reflect.Field;
import javax.transaction.TransactionManager;
import org.jboss.tm.TxManager;
public InjectTMAspect
{
PRivate TransactionManager tm = TxManager.getInstance();
public Object access(FieldReadInvocation invocation)
throws Throwable
{
return tm;
}
public Object access(FieldWriteInvocation invocation)
throws Throwable
{
throw new RuntimeException(
"Setting an @Injected variable is illegal");
}
}
最后我们定义xml来制定需要触发我们的标签的字段。@Inject标注的字段都将被我们
应用到我们的方面中。
<aop>
<aspect class="org.jboss.aspects.InjectTMAspect"/>
<bind pointcut="field(javax.transaction.TransactionManager *->@org.jboss.aspects.Inject)">
<advice name="access"
aspect="org.jboss.aspects.InjectTMAspect"/>
</bind>
</aop>
现在我们把它用在我们代码中。
import javax.transaction.TransactionManager;
import org.jboss.aspects.Inject;
public class MyTransactionalCache
{
@Inject private TransactionManager tm;
...
}
天啊,就这么简单!!!进入讨论组讨论。
(出处:http://www.cncms.com)
赞助商链接