Spring入门篇 学习笔记

@Resource

Spring 还支持使用 JSR-250 中的 @Resource 注解的变量或 setter 方法

@Resource 有一个 name 属性,并且默认 Spring 解释该值作为被注入 bean 的名称

public class SimpleMovieLister{
private MovieFinder movieFinder; @Resource(name="myMovieFinder")
public void setMovieFinder(MovieFinder movieFinder){
this.movieFinder = movieFinder;
}
}

如果没有显式指定 @Resource 的 name,默认名称 是从属性名或 setter 方法得出

注解提供的名字被解析为一个 bean 的名称,这是由 ApplicationContext 中的 CommonAnnotationBeanPostProcessor 发现并处理的

CommonAnnotationBeanPostProcessor 不仅能识别 JSR-250 中的生命周期注解 @Resource,在Spring 2.5 中引入支持初始化回调和销毁回调,前提是 CommonAnnotationBeanPostProcessor 是在 Spring 的 ApplicationContext 中注册的

public class CachingMovieLister{

	@PostConstruct
public void popularMovieCache(){ } @PreDestory
public void clearMovieCache(){ } }

示例

添加类:

@Repository
public class JsrDAO { public void save() {
System.out.println("JsrDAO invoked.");
} } @Service
public class JsrServie { @Resource
private JsrDAO jsrDAO; // @Resource
public void setJsrDAO(JsrDAO jsrDAO) {
this.jsrDAO = jsrDAO;
} @PostConstruct
public void init() {
System.out.println("JsrServie init.");
} @PreDestroy
public void destroy() {
System.out.println("JsrServie destroy.");
} public void save() {
jsrDAO.save();
} }

添加测试类:

@RunWith(BlockJUnit4ClassRunner.class)
public class TestJsr extends UnitTestBase { public TestJsr() {
super("classpath*:spring-beanannotation.xml");
} @Test
public void testSave() {
JsrServie service = getBean("jsrServie");
service.save();
} }

JSR330 标准注解

从 Spring 3.0 开始支持 JSR330 标准注解(依赖注入注解),其扫描方式与 Spring 注解一致

使用 JSR330 需要依赖 javax.inject 包

@Inject

@Inject 等效于 @Autowired,可以使用于类、属性、方法、构造器

@Named

  • 如果想使用特定名称 进行依赖注入,使用 @Named
  • @Named 与 @Component 是等效的

示例

添加 Maven 引用:

<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>

修改 JsrServie 类:

//@Service
@Named
public class JsrServie { // @Resource
// @Inject
private JsrDAO jsrDAO; // @Resource
@Inject
public void setJsrDAO(@Named("jsrDAO") JsrDAO jsrDAO) {
this.jsrDAO = jsrDAO;
} @PostConstruct
public void init() {
System.out.println("JsrServie init.");
} @PreDestroy
public void destroy() {
System.out.println("JsrServie destroy.");
} public void save() {
jsrDAO.save();
} }

源码:learning-spring

最新文章

  1. PHP 编译安装
  2. 彻底弄懂js循环中的闭包问题
  3. Flash 与 php 使用 amfphp
  4. hdu 3068最长回文
  5. 用户体验 | 寻找成套的 App SDK 服务
  6. 项目管理svn
  7. android下载管理、理财、浏览器、商品筛选、录音源码等
  8. log4cpp退出时内存泄露的修复方案
  9. [Err] 1093 - You can't specify target table 's' for update in FROM clause
  10. github 管理代码: code.Aliyun
  11. Java基础之数组(一)
  12. 行盒(line box)垂直方向的属性详解:从font-size、line-height到vertical-align
  13. JavaScript跨域解决方式
  14. linux 内核启动流程分析,移植
  15. Python之路PythonThread,第一篇,进程1
  16. 本机spark 消费kafka失败(无法连接)
  17. AngularJs编辑器
  18. 【BZOJ】1639: [Usaco2007 Mar]Monthly Expense 月度开支(二分)
  19. bootstrap 媒体查询
  20. [Django笔记] uwsgi + nginx 配置

热门文章

  1. leetcode:Single Number
  2. BZOJ1023 SHOI2008 仙人掌图 仙人掌、单调队列
  3. OdnShop 发布 V1.0 正式版,完整可用的开源微商城系统
  4. 六、input框中的数字(金额)只能输入正整数
  5. Deflation Methods for Sparse PCA
  6. 助教总结 -【福大软工实践-2017-2018-K班】
  7. SVN插件和Tomcat插件地址
  8. Jenkins部署net core小记
  9. fiddler查看IP地址和请求响应时间
  10. vue.js 添加 fastclick的支持