技术开发 频道

Java EE 6开发总结:注解支持与Profile

  标准化的依赖注入注解

  依赖注入是开发企业Java应用程序的一种流行技术,在依赖注入中,也叫做反转控制,一个组件指定它依赖的资源,一个注入器通常是一个容器,它为组件提供资源,虽然依赖注入有多种实现方式,但许多开发人员习惯使用注解来实现它。依赖注入在Java开发框架中得到了广泛使用,如Spring和Guice。遗憾的是,之前还没有基于注解构建依赖注入的标准方法,特别需要注意的是,Sping框架采用的基于注解的依赖注入方法与Guice采用的方法不一样。

  随着Java EE 6的发布,这个问题得到了解决,随Java EE 6发布的JSR 330:Java依赖注入改变了这种境况,这个规范的目标是为依赖注入提供一个标准的,可扩展的API。

  API由一套用在可注入类上的注解组成,这些注解包括:

  @Inject:标识可注入的构造器,方法和字段;

  @Qualifier:标识合法的注解,合法的是强类型键,它可以帮助区分相同类型的对象不同使用方法。例如,@Red Car和@Blue Car可以理解为相同类型的不同实例,在这个例子中,@Red和@Blue是合法的;

  @Scope:标识注解范围;

  @Singleton:标识注入器只实例化一次的类型。

  例如,下面的类Stopwatch使用@Inject注解在TimeSource类上注入一个依赖;

class Stopwatch {
        
final TimeSource timeSource;
        @Inject Stopwatch(TimeSource TimeSource) {
          
this.TimeSource = TimeSource;
        }
        
void start() { ... }
        
long stop() { ... }
    }  

  依赖注入可以通过其它注入进行扩展,例如,假设你想创建一个StopwatchWidget类,它在Stopwatch类上有一个依赖,那么你可以象下面这样定义这个类:

class StopwatchWidget {
        @Inject StopwatchWidget(Stopwatch sw) { ... }
        ...
     }

  在响应中,注入器发现一个TimeSource对象,使用TimeSource对象构造一个Stopwatch对象,然后再使用Stopwatch对象构造一个StopwatchWidget对象。

  JSR 330制定的标准化注解使可注入类可以跨框架迁移,你不用再为特定厂商的注解忙碌了。

  注意在JSR 330上构建的CDI和向依赖注入增加的新功能,包括自动发现,可注入类的配置,在运行时定义新的可注入类的API,帮助与第三方框架集成。

0
相关文章