Spring @Resource和@Autowired注解
来源:互联网 发布:网络面临的安全威胁 编辑:程序博客网 时间:2024/04/30 01:47
Spring的@Resource
和@Autowired
的注解都可以完成对象依赖注入功能,但相信很多人跟我一样,对这两者的注解区别不是很清楚。经过查阅各个大牛的博客后,写下此博文来简单的总结与分享。(ps: 本文是在《Spring Resource、Autowired、Qualifier的注解注入及区别》的基础上进行进一步总结,感谢OrderDong作者的分享。),接下来直接进入主题:
Spring提供了一种优秀的解耦方式,使用XML
配置文件或者注解的方式来管理Bean
的实现类和依赖关系。其中,在注解中可以使用@Resource
或者@Autowired
来完成注入。虽然这两个注解都可以完成依赖注入,但它们之间是有区别的。
(a). 默认是按byType or byName来注入
@Resource
默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入;
@Autowired
默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualifier一起使用;
(b). jar包
@Resource
注解是由J2EE提供,而@Autowired
是由spring提供。需要特别说明的是,如果要使用@Resource
,需要导入annotation-api.jar
包,tomcat已经包含了这个jar包。如果工程不是web项目,那就通过maven导入这个包。
(c). 共同点
@Resource和@Autowired都可以标注在字段或者该字段的setter方法上。
说了它们的区别和共同点,下面就谈下怎么使用。
举例
1、XML配置文件
使用注解的方式,需要修改Spring XML配置文件。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> <context:component-scan base-package="com.lemory.controller"/></beans>
2、注入Bean
修改XML配置文件后,可以通过注解方式来注入bean。为了简单,本文使用教程中案例代码来说明。
(1)定义接口
定义Person接口:
public interface Person { void useAxe();}
定义Axe接口:
public interface Axe { String chop();}
(2)实现类
Axe接口实现类:
@Componentpublic class StoneAxe implements Axe{ public String chop() { return "石斧砍柴有点慢"; }}
- Person接口实现类:
- a. 使用
@Resource
注入Axe实现类。
@Componentpublic class Chinese implements Person { @Resource private Axe axe; public void useAxe() { System.out.println(axe.chop()); }}
b. 使用@Autowired
注入Axe实现类。
@Componentpublic class Chinese implements Person { @Autowired private Axe axe; public void useAxe() { System.out.println(axe.chop()); }}
(3)测试类代码
使用Spring test测试。
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={"classpath:application.xml"})public class BeanTest { @Autowired private Person person; @Test public void useAxeTest() { Assert.assertNotNull(person); person.useAxe(); }}
(4)测试结果
a. @Resource
石斧砍柴有点慢
b. @Autowired
石斧砍柴有点慢
从上述测试结果可以看出,使用@Resource
和@Autowired
都可以完成依赖注入。 但由于@Autowired
它首先会根据类型去查找,如果Spring上下文存在多个类实现了Axe接口的话,就会抛出BeanCreationException异常,可以使用@Qualifier
配合@Autowired
来解决这些问题。
- spring 注解@Resource 和 @Autowired
- Spring 注解 @Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring注解@Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring注解 @Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- spring注解---@Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- spring---注解@Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring 注解 @Resource和@Autowired
- Spring @Resource和@Autowired注解
- Java中@Resource注解和@Autowired注解(spring中的@Autowired)
- Spring @Autowired @Resource注解
- 关系型数据库范式1NF,2NF,3NF
- 操作oracle数据库简单事例
- scikit-learn介绍
- Servlet的运行原理
- 【Java面试知识点】IO和NIO
- Spring @Resource和@Autowired注解
- zoj 2022
- DB-MySQL 备份
- shell 中awk的实例使用
- 放射变换
- 快速幂
- 利用AndroidPN,搭建自己的Android推送平台
- 整数中1出现的次数,即从1到n整数中1出现的次数(剑指Offer)
- 算法与数据结构 其五 (补充)函数对象实现查找二叉树