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

学习 Spring (十一) 注解之 Spring 对 JSR 支持的更多相关文章

  1. spring mvc注解和spring boot注解

    1 spring mvc和spring boot之间的关系 spring boot包含spring mvc.所以,spring mvc的注解在spring boot总都是可以用的吗? spring b ...

  2. mybatis学习(十一)——springmvc++spring+mybatis整合

    做任何一个项目都以一个需求,这里先定义一下需求:利用三大框架查询酒店列表. 一.搭建开发环境 1.创建一个web项目 我这里用的是 jdk1.8+tomact7.0 2.创建hotel表 CREATE ...

  3. Spring @Value注解 and Spring Boot @ConfigurationProperties注解

    一.Spring的@Value Spring EL表达式语言,支持在XML和注解中表达式,类是于JSP的EL表达式语言. 在Spring开发中经常涉及调用各种资源的情况,包含普通文件.网址.配置文件. ...

  4. [spring]基于注解的spring配置

    Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员自己new 构造方法来调 ...

  5. spring aop使用,spring aop注解,Spring切面编程

    ================================ ©Copyright 蕃薯耀 2020-01-21 https://www.cnblogs.com/fanshuyao/ 一.第一步, ...

  6. Spring MVC 注解[转]

    [学习笔记]基于注解的spring3.0.x MVC学习笔记(九) 摘要: 本章节,仅为@SessionAttributes的功能扩展介绍介绍,结合@requestparam注解进行简易无数据库分页. ...

  7. spring+mybatise注解实现

    spring+mybatise注解实现 spring.jpa.database=MYSQL spring.datasource.type=com.alibaba.druid.pool.DruidDat ...

  8. 死磕Spring之AOP篇 - Spring 事务详解

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  9. Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC

    内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...

随机推荐

  1. 区分range() , np.arange() , np.linspace()

    content: range() np.arange() np.linspace() 一.range(start, stop, step) 1.range() 为 python 自带函数 2.生成一个 ...

  2. package-info.java的使用

    一.引入 上文中,提到了注解类JyzTargetPackage可以定义为@Target(ElementType.PACKAGE),可是在被注解类里我无论怎么加,编译器都报错,于是引入了package- ...

  3. Apollo 3.0 硬件与系统安装指南

    https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/apollo_3_0_hardware_system_installa ...

  4. 【Codeforces Round 650】Codeforces #334 (Div. 1)

    模拟CF650,ABC三题,RK90 Codeforces 650 A 思路:首先看式子 \(\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}=|x_i-x_j|+|y_i-y_j|\) ...

  5. .NET 通过entity framework报数据库连接错误:ORA-01017: invalid username/password; logon denied

    如题,答案为:[ORA-01017].NET程序连接数据库失败 转载文章内容如下: 遇到问题 使用 C#/.NET 开发的一个客户端程序,需要连接 ORACLE 数据库,使用 Oracle.Manag ...

  6. CF429E Points and Segments 构造、欧拉回路

    传送门 如果把一条线段\([l,r]\)看成一条无向边\((l,r+1)\),从\(l\)走到\(r+1\)表示线段\([l,r]\)染成红色,从\(r+1\)走到\(l\)表示线段\([l,r]\) ...

  7. Mysql数据库触发器调用脚本

    一.数据库触发器 mysql触发器trigger 实例详解 对数据库触发器new和old的理解 示例 二.UDF mySql的UDF是什么 三.安装执行命令UDF mysql触发器调用外部脚本(安装) ...

  8. mysql数据的导入和导出

    一. mysqldump工具基本用法,不适用于大数据备份   1. 备份所有数据库: mysqldump -u root -p --all-databases > all_database_sq ...

  9. vue-cli脚手架安装和webpack-simple模板项目生成

    vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目. GitHub地址是:https://github.com/vuejs/vue-cli 一. ...

  10. 输入input

    用input接收到的类型全部都是字符串!!! 要查看变量类型,可以使用type()模块: 字符串不能和数字进行比较,因此如果输入是以input方式输入的,需要先转换成数字格式: