Spring 注解中@Resource 和 @Authwired 的区别

@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
  @Resource装配顺序
  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

@Autowired(自动装配)注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。如果我们想使用按名称装配,可以结合@Qualifier(精确装配)注解一起使用。如下:
@Autowired @Qualifier("personDaoBean")
private PersonDao personDao;

@Resource注解和@Autowired一样,也可以标注在字段或属性的setter方法上,但它默认按名称装配。名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。
@Resource(name=“personDaoBean”)
private PersonDao personDao;//用于字段上

时间: 2024-10-13 23:17:50

Spring 注解中@Resource 和 @Authwired 的区别的相关文章

Spring注解中@Configuration和@Configurable的区别

@Configuration该注解是可以用来替代XML文件.以前我们配置bean时,都是写在applicationContext.xml文件中的.有了这个注解后,我们就可以编写一个类在其上面加上该注解.即配置类.在配置类中可以在方法上加@Bean注解定义其中的Bean @Configurable现在假设,我们想在非Spring管理的类中使用依赖注入:比如:手动new出来的对象,正常情况下,Spring是无法依赖注入的,这个时候可以使用@Configurable注解: 原文地址:https://w

spring注解中@component是什么意思

@Component("userManager") public class UserManagerImpl implements UserManager { private UserDao userDao; public UserDao getUserDao() { return userDao; } @Resource public void setUserDao(UserDao userDao) { this.userDao = userDao; } /* * (non-Java

Spring MVC注解中@PathVariable和@RequestParam的区别

@PathVariable注解的用法和作用 映射 URL 绑定的占位符 spring3.0的一个新功能:接收请求路径中占位符的值 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过注解@PathVariable(“xxx“) 绑定到操作方法的入参中. @RequestMapping(value = "/index/{id}" 请求路径:http://localhost:8080/hello/user/in

Spring AOP中 args和arg-names的区别

这两天在看aop aspectj的各种语法,发现里面有两个概念 args和arg-names很容易混淆,网上也基本没说清楚,所以就动手试了一下,发现还是自己试试比较好理解 先说结论: args是和execution用在一起,用来过滤要被代理的方法的,如果不和arg-names一起用,那么用法是args(类名,类名...). 如果和arg-names(参数名1,参数名2...)一起用,那么用法是args(参数1,参数2...),其中,参数1和参数2的类型由arg-names所代表的方法的参数确定

Spring bean中id和name的区别

最近在开发项目的时候发现spring的BeanFactory创建bean的时候有时候有2种不同的配置,即<bean id="test" class="com.TestImpl">与<bean name="test" class="com.TestImpl">,下面一起分析一下这2种配置的区别: 1.命名规范.id属性命名必须满足xml命名规范,而name属性命名可以不用遵守.不论是id属性还是name属

spring配置中classpath: 与classpath*:的区别

classpath和classpath*区别:  classpath:只会到你的class路径中查找找文件. classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找. 注意: 用classpath*:需要遍历所有的classpath,所以加载速度是很慢的:因此,在规划的时候,应该尽可能规划好资源文件所在的路径,尽量避免使用classpath*. classpath*的使用: 当项目中有多个classpath路径,并同时加载多个classpath路径下(此种情况

Spring(一) Spring配置文件中classpath和classpath*的区别

classpath 只会到你的class路径中查找找文件. classpath* 不仅包含class路径,还包括jar文件中(class路径)进行查找. class路径 src不是classpath,WEB-INF/classes及WEB-INF/lib才是classpath lib和classes同属classpath,两者的访问优先级为: lib>classes. 参考文章 java项目中Classpath路径到底指的是哪里 原文地址:https://www.cnblogs.com/lyld

【转载】Spring加载resource时classpath*:与classpath:的区别

免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:kyfxbl     原文地址: spring配置中classpath和classpath*的区别   在spring配置文件里,可以用classpath:前缀,来从classpath中加载资源  比如在src下有一个jdbc.properties的文件,可以用如下方法加载: <bean id="propertyConfigurer" class="

spring中@Resource注解的应用

前言,spring是一个非常优秀的框架,在依赖IOC编程方面,手工方式提供了两种方式注入Bean,XML配置和使用注解+自动扫描package的方式 [email protected]应用在字段上,则注入规则是: a.先使用字段名字匹配bean,查找到bean则注入,如果类型不匹配则此时有异常,注入失败 b.如果字段名字没有匹配到Bean则spring会尝试采用字段类型匹配,如果找打bean则注入,如果字段类型是接口则有可能会匹配到多个类型,则会抛出匹配到多个bean的异常. 注入失败. [em