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