当前位置:   article > 正文

@Bean注解理解和使用

@Bean注解理解和使用

@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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.执行后错误信息如下:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'user' available
  • 1

容器里没有一个名称为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());
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

本以为使用@Resource按bean名称注入时会报错,结果程序正常运行了,很是纳闷,网了查了一下才知道@Resource先按名称注入,若找不到名称则按类型注入,真是基础忘得好干净,至于@Resource和@Autowired源码解读,后续会加上。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/1009397
推荐阅读
相关标签
  

闽ICP备14008679号