赞
踩
@Bean注解理解和使用
在做Spring boot整合Spring Data Redis时,注入redisTemplate对象,报错“找不到这种类型的bean”,在网上找到一篇博客(已收藏),问题已解决.
在解决问题中,对于@Bean注解的使用,重新了解了一下,网上有的说@Bean会生成两个bean,一个是方法返回类型的首字母小写,一个是方法名;有的说只返回一个,bean的名称为方法名,搞得我有点乱,所以自己操作验证了一下:
1.在配置类中添加如下方法:
@Bean
public User getUser(){
User user = new User();
user.setName("liuhongfei");
return user;
}
2.测试类中通过ApplicationContext获取容器中的bean
@Test
public void getBeanInfo(){
Object userOne = applicationContext.getBean("getUser");
Object userTwo = applicationContext.getBean("user");
System.out.println("从容器里拿到的bean-userGet:" + userOne);
System.out.println("从容器里拿到的bean-user:" + userTwo);
}
3.执行后错误信息如下:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'user' available
容器里没有一个名称为user的bean,所以被@Bean标识的方法只会返回一个bean,bean的id为方法名,bean的类型为方法返回值类型。
在解决找不到redisTemplate对象时,还涉及到了对象注入@Autowired和@Resource
@Resource
private User user;
@Test
public void getUserInfo(){
System.out.println("user的name:" + user.getName());
}
本以为使用@Resource按bean名称注入时会报错,结果程序正常运行了,很是纳闷,网了查了一下才知道@Resource先按名称注入,若找不到名称则按类型注入,真是基础忘得好干净,至于@Resource和@Autowired源码解读,后续会加上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。