站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题JBOSS AOP学习笔记-依赖注入

JBOSS AOP学习笔记-依赖注入

摘要:

依赖注入(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标注的字段都将被我们
应用到我们的方面中。

 



aspect="org.jboss.aspects.InjectTMAspect"/>




现在我们把它用在我们代码中。

 import javax.transaction.TransactionManager;
import org.jboss.aspects.Inject;

public class MyTransactionalCache
{
@Inject private TransactionManager tm;
...
}


天啊,就这么简单!!!

↑返回目录
前一篇: jBPM 载入定义的流程的方法
后一篇: JBOSS AOP学习笔记-Mixin类和多重继承