【问题标题】:how to initialize a bean in spring container once and use it everywhere如何在spring容器中初始化一个bean并在任何地方使用它
【发布时间】:2018-10-23 04:47:31
【问题描述】:

实际上我正在使用 spring 来开发 web 应用程序,我面临的问题是我在 spring 容器加载后立即初始化一个 bean,现在我必须在不同的部分使用该 bean我的程序。 我有限制 1.我可以在任何地方获取应用程序上下文并获取那个bean但是根据我的问题我应该得到那个bean而不需要一次又一次地编写冗余代码。所以有什么方法可以初始化那个bean并直接在我的任何地方使用它程序。

【问题讨论】:

    标签: java xml spring spring-mvc


    【解决方案1】:

    如果您已经初始化了 bean,您可以通过 @Autowired 从 Spring 应用程序中的每个组件访问它。

    private SomeClass myBean;
    
     @Autowired   
    public void setMyBean(SomeClass myBean){
          this.myBean =myBean;
        }
    

    或者只是:

    @Autowired
    private SomeClass myBean;
    

    我更喜欢第一种方法,在我眼里看起来更花哨。

    【讨论】:

      【解决方案2】:

      您不应该直接从上下文中获取您的 bean,而是应该 @Autowire 它们并让 Spring 为您注入它。

      以下是通过构造函数注入的两个依赖项的示例:

      @Component
      public class Car {
      
          private final Engine engine;
          private final Transmission transmission;
      
          @Autowired
          public Car(Engine engine, Transmission transmission) {
              this.engine = engine;
              this.transmission = transmission;
          }
      }
      

      请注意,您的类本身必须是 Spring 组件才能进行注入。

      Spring 中实际上存在三种依赖注入:构造函数注入、字段注入和 setter 注入。 Spring 团队建议使用基于构造函数的方法,这篇文章对此提出了非常好的论据:https://blog.marcnuri.com/field-injection-is-not-recommended/

      关于基于构造函数的注入的更多信息可以参考这个链接:https://www.baeldung.com/constructor-injection-in-spring

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-20
        • 2020-08-23
        • 1970-01-01
        • 1970-01-01
        • 2023-02-02
        • 2018-12-15
        • 1970-01-01
        • 2012-06-23
        相关资源
        最近更新 更多