JSR330 @Inject的一些记录

为了统一各种依赖注入框架的编程模型,JCP发布了Java依赖注入规范——JSR330 ,@Inject,这是一种通用的注入模型,Spring3.,Guice,Picocotainer都支持JSR330

@Inject是JSR330的核心,该注解几乎完全可以替换Spring的@Autorwired

但是使用上有些不同:

@Inject没有required属性,注解中标注的依赖关系必须存在,不然则抛出异常

而且除了@Inject,JSR330还有另一种技巧:注入一个Provider。Provider接口可以实现Bean引用的延迟注入以及注入Bean的多个实例等功能,在调用provider的get()方法之前,实际的对象并没有注入。

限定@Inject所标注的属性
对于@Autowired来说,有@Qualifier来限定。而对于@Inject来说,有@Named来限定

这两个限定的关键区别在语义层面上。
@Qualifier帮助我们缩小所匹配的Bean的范围。默认使用Bean的ID
@Named通过Bean的ID来标识可选的Bean

同样的,JSR330也可以自定义Qualifier,而且不像Spring的不建议使用。JSR330鼓励我们创建自定义的限定器注解:


@Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface sudojs(){
}

你可能感兴趣的:(JSR330 @Inject的一些记录)