zoukankan      html  css  js  c++  java
  • 学习 Spring (十一) 注解之 Spring 对 JSR 支持

    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

  • 相关阅读:
    JDBC的简单使用
    IO流知识点总结
    使用IO流实现一个简单的小Dome
    java编程实现日历
    如何用Java实现DVD的一些功能
    java 入门学习
    在mac电脑上创建java的一些简单操作
    Java Struts框架的一些问答面试题
    分层开发的思想
    JDBC连接数据库
  • 原文地址:https://www.cnblogs.com/victorbu/p/10469510.html
Copyright © 2011-2022 走看看