我有一个带有自动扫描和 @Component 注释的 Spring 项目。某些组件需要使用@Autowired注入到不同的bean中。默认情况下它会与创建为单例的组件 bean 相同吗?如果是这样,我如何将同一组件的不同实例注入到不同的bean中?
PS 我知道它接近基础知识并且听起来很一般。只是想为自己说清楚。
提前致谢
创建 bean 定义时,您将创建一个配方来创建由该 bean 定义定义的类的实际实例。bean 定义是一个配方的想法很重要,因为这意味着,与类一样,您可以从单个配方创建许多对象实例。
您不仅可以控制要插入到从特定 bean 定义创建的对象中的各种依赖项和配置值,还可以控制从特定 bean 定义创建的对象的范围。这种方法功能强大且灵活,因为您可以通过配置选择创建的对象的范围,而不必在 Java 类级别烘焙对象的范围。Bean 可以定义为部署在多个范围之一中:Spring 框架开箱即用,支持七个范围,其中五个仅在您使用 Web 感知的 ApplicationContext 时才可用。
开箱即用支持以下范围。您还可以创建自定义范围。
Singleton (默认)将单个 bean 定义范围限定为每个 Spring IoC 容器的单个对象实例。
原型 将单个 bean 定义范围限定为任意数量的对象实例。
Request 将单个 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/
| 归档时间: |
|
| 查看次数: |
9854 次 |
| 最近记录: |