@Autowired
private StringRedisTemplate stringRedisTemplate;
@Resource(name="stringRedisTemplate")
private ValueOperations<String,String> valOpsStr;
@Autowired
private RedisTemplate<Object, Object> redisTemplate;
@Resource(name="redisTemplate")
private ValueOperations<Object,Object> valOps;
在看书时发现了这样的一段代码,就是想问的是,【@Autowired自动注解StringRedisTemplate,但是为什么@Resource注解是利用name属性指定名称时,可以指定stringRedisTemplate】这是什么原理呢,这样的话不就会导致创建相同名称的bean了吗?
@Autowired 如字面意思是自动注入,而@Resource,需要注入一个命名的bean,它们的查找机制不同,@Autowired需要扫描项目,查找相关Bean自动注入,是自动的,无须操心怎么注入。而@Resource需要手动指定一个Bean,如果是spring boot项目,需要配置一个配置文件,用@Bean('xxx')返回命名Bean,如果不是spring boot,那么需要在xml配置。一个自动一个手动,不会产生冲突。