WEB开发网
开发学院软件开发Java JBOSSAOP学习笔记-依赖注入 阅读

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)


Tags:JBOSSAOP 学习 笔记

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接