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的几种常用注解和区别

参考技术A

Spring 声明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不一样)的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc注入service报错是啥原因?

2021-12-29 Spring中@Autowired和@Value的预解析和属性注入

Bean和注入Bean的几种常用注解和区别

spring autowired 自动注入问题

spring autowired怎么按照name注入

spring mvc如何使用resource