注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

拥有自己的梦想,跟随心的召唤

平凡是福

 
 
 

日志

 
 

Java 依赖注入标准 JSR 330  

2015-12-05 15:27:57|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
https://jcp.org/en/jsr/detail?id=330
包名:javax.injectgradle: javax.inject:javax.inject:1
      Java 依赖注入标准(JSR-330,Dependency Injection for Java)1.0 规范于2009年10月伴随 Java 6 发布 。该规范主要是面向依赖注入使用者,而对注入器实现、配置并未作详细要求。JSR-299(Contexts and Dependency Injection for Java EE platform,参考实现 Weld )在依赖注入上也使用该规范。
参考实现:Spring3+ 、Guice

特殊说明:
1)当使用 @Named 注解时,jsr330 默认的 scope 是 prototype,需添加 @Singleton 注解来声明为单例。
注意 spring 的默认实现中却是 singleton,这与 jsr330 标准不一致,若要 spring 的默认实现保持与 jsr330 一致,需要添加如下的配置:
<context:component-scan base-package="my.package" scope-resolver="org.springframework.context.annotation.Jsr330ScopeMetadataResolver" />
对于 web 应用 spring 进一步提供了 request、session 的 scope,可以通过继承 Jsr330ScopeMetadataResolver 类扩展出这些 scope,详细可以参考《Spring and JSR 330 scopes
2)通过使用 javax.inject.Provider<T> 可以提供更多控制:
  • 可以返回多个实例 - prototype 模式可以使用此方式来实现
  • 实例的返回可以延迟化或可选
  • 打破循环依赖
  • 可以在一个已知作用域的实例内查询一个更小作用域内的实例
3)对于 bean 的生命周期回调方法,可以使用 jsr250 注解中的 @PostConstruct 和 @PreDestroy

使用范例:
@Inject 代替 Spring 的 @Autowired 注入 bean
@Named 代替 Spring  @Component、@Qualifier
@PostConstruct 代替 Spring 的 InitializingBean 接口方法(注入完成后的回调)
@PreDestroy 代替 Spring 的 DisposableBean 接口方法(对象销毁前的回调)
import javax.inject.Inject;
import javax.inject.Named;

// JSR 330
@Named("movieListener")
@Singleton
public class SimpleMovieLister {
  private MovieFinder movieFinder;
  @Inject
  public void setMovieFinder(@Named("movieFinder") MovieFinder movieFinder) {
      this.movieFinder = movieFinder;
  }
}

// Spring
@Component("movieListener")
public class SimpleMovieLister {
  private MovieFinder movieFinder;
  @Autowired
  public void setMovieFinder(@Qualifier("movieFinder") MovieFinder movieFinder) {
      this.movieFinder = movieFinder;
  }
}
Spring annotations vs. standard annotations:
使用 JSR 330 的标准注解 - rongjih - 拥有自己的梦想,跟随心的召唤
 

参考:
Spring JSR-250 注解
  评论这张
 
阅读(495)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017