@Autowired和@Resource都是Spring框架中用于依赖注入的注解,它们的作用是将一个依赖对象自动注入到另一个对象中。它们的区别如下:
@Autowired是Spring自带的注解,而@Resource是Java EE 5规范中定义的注解,需要依赖JDK或者其他框架的支持。
@Autowired默认按照类型进行自动装配,如果有多个同类型的Bean,则需要通过@Qualifier指定具体的Bean名称。而@Resource默认按照名称进行自动装配,如果没有指定名称,则默认使用成员变量名称作为Bean名称。
@Autowired是通过BeanPostProcessor实现的,而@Resource是通过javax.annotation.Resource实现的。
@Autowired可以注入任意类型的Bean,包括自定义类型、接口类型、抽象类类型等。而@Resource只能注入Java EE规范中定义的资源,例如DataSource、JMS ConnectionFactory等。
总的来说,如果项目是基于Spring框架的,建议使用@Autowired注解,但是当使用@Autowired注入时如果是一个RedisTemplate,如下:
@Autowired private RedisTemplate<String,Integer> redisTemplate;
这时会报以下错误:
Field redisTemplate in ... required a bean of type ...RedisTemplate' that could not be found.
这是因为@Auowired是根据类型来注入的,泛型也被算在里面,而RedisTemplate里并没有想要注入的这一类型,所以注入失败,而@Resource默认根据名称注入,RedisTemplate这个bean在我们的RedisConfig里被加到了spring容器中,所以可以注入。这时有几种解决方式:
1、将RedisTemplate对象上的注解从@Autowired改成@Resource;
2、在注入RedisTemplate的时候将泛型去掉
3、添加依赖:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
4、可以通过创建一个bean,加上泛型的RedisTemplate交给IOC容器管理
标签:Resource,区别,Autowired,Bean,注解,RedisTemplate,注入 From: https://www.cnblogs.com/hwj7/p/17702534.html