spring mvc 里@Autowired注入的bean和ApplicationContext的getBean获取的bean不是同一个(hashCode不一样)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring mvc 里@Autowired注入的bean和ApplicationContext的getBean获取的bean不是同一个(hashCode不一样)相关的知识,希望对你有一定的参考价值。
spring mvc 里@Autowired自动注入的bean(jdbcTemplate) 和ApplicationContext的getBean()方法获取的bean竟然不是同一个bean(hashCode不一样),请问怎么手动获取和@Autowired自动注入的一样的bean呀???
当然不一样。我今天在做springbatch的 job时遇到了同样的问题,到谷歌搜了一下:A bean with scope prototype just means that everytimeApplicationContext.getBean is called a new instance of the bean is created. If you try to inject a prototype bean in a singleton, your prototype bean will be injected once (and so is no more a prototype).
大意就是说spring管理的bean默认是单例模式,这种情况下autowired和getbean拿到的没区别,但是如果你加入了@Scope(SCOPE_PROTOTYPE)那么就必须用getbean去拿否则这个注解没有任何意义 参考技术A 一个是启动是自动注入的,一个是获取的..感觉是这样..
Bean和注入Bean的几种常用注解和区别
参考技术ASpring 声明Bean的注解:
@Component: 组件,没有明确的角色。
@Service : 在业务逻辑层(Service层)使用。
@Repository: 再数据访问层(Dao层)使用。
@Controller: 再展现层(MVC->Spring MVC)使用。
Spring 注入Bean的注解:
@Autowired:Spring提供的注解。
@inject:JSR-330提供的注解。
@Resource:JSP-250提供的注解。
‘@Autowired’ 和‘@Inject’他们都是通过‘AutowiredAnnotationBeanPostProcessor’ 类实现的依赖注入,二者具有可互换性。
‘@Resource’通过 ‘CommonAnnotationBeanPostProcessor’ 类实现依赖注入,即便如此他们在依赖注入时的表现还是极为相近的。
以下是他们在实现依赖注入时执行顺序的概括:
@Autowired and @Inject
Matches by Type
Restricts by Qualifiers
Matches by Name
@Resource
Matches by Name
Matches by Type
Restricts by Qualifiers (ignored if match is found by name)
以上是关于spring mvc 里@Autowired注入的bean和ApplicationContext的getBean获取的bean不是同一个(hashCode不一样)的主要内容,如果未能解决你的问题,请参考以下文章