@Resource
的作用相当于 @Autowired
,只不过 @Autowired
按 byType 自动注入,面 @Resource
默认按 byName 自动注入罢了。@Resource
有两个属性是比较重要的,分别是 name 和 type,Spring 将 @Resource
注释的 name 属性解析为 Bean 的名字,而 type 属性则解析为 Bean 的类型。所以如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不指定 name 也不指定 type 属性,这时将通过反射机制使用 byName 自动注入策略。
Resource 注释类位于 Spring 发布包的 lib/j2ee/common-annotations.jar 类包中,因此在使用之前必须将其加入到项目的类库中。来看一个使用 @Resource
的例子:
清单 16. 使用 @Resource 注释的 Boss.javapackage com.baobaotao;
一般情况下,我们无需使用类似于 @Resource(type=Car.class)
的注释方式,因为 Bean 的类型信息可以通过 Java 反射从代码中获取。
要让 JSR-250 的注释生效,除了在 Bean 类中标注这些注释外,还需要在 Spring 容器中注册一个负责处理这些注释的 BeanPostProcessor
:
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/> CommonAnnotationBeanPostProcessor
实现了 BeanPostProcessor
接口,它负责扫描使用了 JSR-250 注释的 Bean,并对它们进行相应的操作。
------------------------------------------------
@Autowired 默认是按照byType进行注入的,但是当byType方式找到了多个符合的bean,又是怎么处理的?
经过一些代码的测试,我发现,Autowired默认先按byType,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常。
例子:
@Autowired
private ExamUserMapper examUserMapper; - ExamUserMapper是一个接口
1. spring先找类型为ExamUserMapper的bean
2. 如果存在且唯一,则OK;
3. 如果不唯一,在结果集里,寻找name为examUserMapper的bean。因为bean的name有唯一性,所以,到这里应该能确定是否存在满足要求的bean了
@Autowired也可以手动指定按照byName方式注入,使用@Qualifier标签,例如:
@Autowired
()
@Qualifier
(
"baseDao"
)
因为bean的name具有唯一性,理论上是byName会快一点,但spring默认使用byType的方式注入,让我很迷惑,确定不了哪一个真的快。具体到实际应用,感觉差别不大,就看大家的习惯
另注:@Resource(这个注解属于J2EE的)的标签,默认是按照byName方式注入的
http://blog.csdn.net/zhiweianran/article/details/8659944
相关推荐
在 spring 框架中,除了使用其特有的注解外,使用基于 JSR-250 的注解,它包括 @PostConstruct, @PreDestroy 和 @Resource 注释。 首先,咱们简单了解 @PostConstruct 和 @PreDestroy 注释: 为了定义一个 bean...
凡带有@Component,@Controller,@Service,@Repository 标志的等于告诉Spring这类将自动产生对象,而@Resource则等于XML配置中的ref,告诉spring此处需要注入对象,所以用@Resource就有了ref的功效。 要用注解注入方式...
@Resource 有两个属性是比较重要的,分别是 name 和 type,Spring 将 @Resource 注释的 name 属性解析为 Bean 的名字,而 type 属性则解析为 Bean 的类型。所以如果使用 name 属性,则使用 byName 的自动注入策略,...
spring4框架系列 [ 5 ] 基于注释注入@Component @Value @Resource @Autowired @PostConstruct @PreDestroy
spring-resourcespring resouce code learn自己学习Spring过程中的一些记录, 太复杂的功能记录大概流程, 一些重要点注释实现细节和补充一些使用的例子spring 源码阅读记录IOCAOPMVCSpringMVC源码分析spring 实战...
spring中注释 @Resource(按名称进行装配) jar包
用于将文件从Resource读取到字符串中 @Log 注释类,用于注入适当的Logger LoggerProvider 提供Logger界面 @LogField 注释类,指示要记录的字段 JdbcProperties 用于保存JDBC DataSource属性的抽象类 Jdbc...
注释@ComponentScan将扫描并在pooky.projects.beans中注册bean。 要运行示例,请使用Main.java 有趣的阅读 批注@ Inject,@ Resource和@Autowired之间的区别 更多演示 Java EE World示例可在以下位置找到: : ...
Spring Boot 2 Oauth2资源和授权服务器 使用用户和客户端数据库... git clone https://github.com/indrekru/spring-boot-2-oauth2-resource-server.git 您需要在您的环境中安装Maven: Mac(自制): brew install
sql文件在resource中,spring注解,非注解代码已经注释,可以自己调试学习一下
Spring注释配置:Unexpected exception parsing XML document from class path resource [beans-annotation.xml]-附件资源
<import resource="spring-mybatis.xml">也注释掉。则可以只配置redis的数据源即可运行。另外,若你对redis使用不太熟悉,则有必要在说一句,你需要将redis启动配置文件redis.conf中的bind那一行注释掉,否则远程是...
mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in ...
-- 使用 annotation 自动注册bean,并检查@Controller, @Service, @Repository注解已被注入,也可以分开注释,或者固定某个目录下 --> *" /> <!-- <aop:config>--> <!-- execution第一个星号代表任何返回类型,第...
6.修改resource文件中的application.properties,配置其中的数据库信息 7.修改com.wsk.movie.email.Send文件中的用户账号和密码信息。 8.由于使用了百度提供的图片识别功能,所以需要修改...
新手请按照文件夹顺序一个一个的看,authorization_server是授权服务,resource_server是资源服务,使用test项目中的用例执行测试每个项目中的文件都非常少,请阅读代码中的注释,相信你一定能看得懂.大致解释一下本项目...
Iono.Container关于扩展照明/容器的Spring框架样式容器库Iono.Container 是一个 PHP 服务容器(带注解) 像 Spring 框架样式注释 (java) 安装composer.json " require " : { " php " : " >=5.4 " , " ext-tokenizer ...
鲍曼 Bowman是一个用于访问 REST API的Java库。 文献资料 特征 通过带注释的客户端模型上的自动,惰性链接遍历来简化API的使用 ... @ResourceId public URI getId () { return id; } public String getName () { r
由Spring Boot和React.js基于和分离构建的电影站点。 怎么跑 首先,克隆它 > $ git clone git@github.com:InnoFang/jokul.git > $ cd jokul 其次,添加数据并修改配置 对于第一次运行,服务器数据为空。 您必须自己...