Spring @Component @Autowired

时间:2017-03-16 09:48:20

标签: java spring

我有一个带有自动扫描和@Component注释的Spring项目。需要使用@Autowired将一些组件注入到不同的bean中。它是默认情况下创建为单例的相同组件bean吗?如果是这样,我如何将同一组件的不同实例注入不同的bean?

P.S。我知道它接近基础,听起来非常普遍。只想为自己说清楚。

提前致谢

2 个答案:

答案 0 :(得分:3)

创建bean定义时,可以创建一个配方,用于创建该bean定义定义的类的实际实例。 bean定义是一个配方的想法很重要,因为这意味着,与一个类一样,您可以从一个配方创建许多对象实例。

您不仅可以控制要插入到从特定bean定义创建的对象中的各种依赖项和配置值,还可以控制从特定bean定义创建的对象的范围。这种方法功能强大且灵活,您可以选择通过配置创建的对象的范围,而不必在Java类级别烘焙对象的范围。可以将Bean定义为部署在多个范围之一中:开箱即用,Spring Framework支持七个范围,其中五个范围仅在您使用支持Web的ApplicationContext时才可用。

开箱即用支持以下范围。您还可以创建自定义范围。

<强>的Singleton (默认)将每个Spring IoC容器的单个bean定义范围限定为单个对象实例。

<强>原型 将单个bean定义范围限定为任意数量的对象实例。

请求 将单个bean定义范围限定为单个HTTP请求的生命周期;也就是说,每个HTTP请求都有自己的bean实例,它是在单个bean定义的后面创建的。仅在Web感知Spring ApplicationContext的上下文中有效。

<强>会话 将单个bean定义范围限定为HTTP会话的生命周期。仅在Web感知Spring ApplicationContext的上下文中有效。

<强> globalSession的 将单个bean定义范围限定为全局HTTP会话的生命周期。通常仅在Portlet上下文中使用时有效。仅在Web感知Spring ApplicationContext的上下文中有效。

<强>应用 将单个bean定义范围限定为ServletContext的生命周期。仅在Web感知Spring ApplicationContext的上下文中有效。

<强>的WebSocket 将单个bean定义范围限定为WebSocket的生命周期。仅在Web感知Spring ApplicationContext的上下文中有效。

有关详细信息,请访问:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/

答案 1 :(得分:2)

默认情况下,如果您希望许多实例将其定义为singleton,则Spring托管bean的范围为prototype(仅创建一个实例)。

使用以下注释:

@Scope("prototype")

这是一个很好的完整示例:

https://www.mkyong.com/spring/spring-bean-scopes-examples/