我有一个带有自动扫描和@Component注释的Spring项目。一些组件需要使用@Autowired注入不同的bean。默认情况下,它将是作为单例创建的同一个组件bean吗?如果是这样,如何将同一组件的不同实例注入到不同的bean中?
P.S.我知道它很基本,听起来很笼统。只是想让我自己明白。
提前感谢
发布于 2017-03-16 09:52:17
默认情况下,Spring的作用域是singleton (只创建一个实例),如果您希望许多实例将其定义为prototype的话。
使用以下注释:
@Scope("prototype")下面是一个很好的完整示例:
发布于 2017-03-16 09:52:20
创建bean定义时,可以创建一个菜谱,用于创建由该bean定义的类的实际实例。bean定义是菜谱这一概念很重要,因为它意味着,与类一样,您可以从单个菜谱中创建许多对象实例。
您不仅可以控制要插入到从特定bean定义创建的对象中的各种依赖项和配置值,还可以控制从特定bean定义创建的对象的范围。这种方法功能强大且灵活,因为您可以选择通过配置创建的对象的作用域,而不必在Java类级别上烘焙对象的作用域。Bean可以定义为部署在多个作用域中的一个:开箱即用,Spring支持七个作用域,其中五个只有在使用web感知的ApplicationContext时才可用。
支持下列范围。还可以创建自定义作用域。
Singleton (默认)将单个bean定义为每个IoC容器的单个对象实例。
Prototype将单个bean定义用于任意数量的对象实例。
请求将单个bean定义转换为单个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/
https://stackoverflow.com/questions/42830444
复制相似问题