为了统一各类依赖注入框架的编程模型,JCP发布了Java依赖注入规范——JSR330 ,@Inject,这是一种通用的注入模型,Spring3.,Guice,Picocotainer都支持JSR330java
@Inject是JSR330的核心,该注解几乎彻底能够替换Spring的@Autorwired编程
可是使用上有些不一样:框架
@Inject没有required属性,注解中标注的依赖关系必须存在,否则则抛出异常ide
并且除了@Inject,JSR330还有另外一种技巧:注入一个Provider。Provider接口能够实现Bean引用的延迟注入以及注入Bean的多个实例等功能,在调用provider的get()方法以前,实际的对象并无注入。ui
限定@Inject所标注的属性 对于@Autowired来讲,有@Qualifier来限定。而对于@Inject来讲,有@Named来限定code
这两个限定的关键区别在语义层面上。 @Qualifier帮助咱们缩小所匹配的Bean的范围。默认使用Bean的ID @Named经过Bean的ID来标识可选的Bean对象
一样的,JSR330也能够自定义Qualifier,并且不像Spring的不建议使用。JSR330鼓励咱们建立自定义的限定器注解:接口
<!-- lang: java --> @Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Qualifier public @interface sudojs(){ }