【问题标题】:How to create a Spring Bean using existing library如何使用现有库创建 Spring Bean
【发布时间】:2017-10-12 00:05:53
【问题描述】:

我是 Spring 新手,正在使用现有的 Spring 库/api。所有bean都在java类中配置,即。没有xml,现有配置在main方法中自带一行:

SpringApplication.run(ServerExchange.class, args);

该库处理与私有服务器接口的协议,我已经能够创建类的普通实例,即:

AccountManager aM = new AccountManager()

但是,要自动装配到每个类中的配置(例如 AccountManager)并没有完成,因为它打算创建为“bean”,所以当我使用 AccountManager 时,它的依赖项是@Autowired 为空

我一直在网上寻找并试图找到一个示例,说明如何从 main 方法中的第一个给定行开始,但是我可以在网上找到的主要基于 xml 或“ApplicationContext”。我不知道如何迈出第一步并简单地创建一个bean,任何人都可以提供一个创建AccountManager bean的代码示例吗?

提前致谢。

编辑: 澄清一下,我对 main 方法中所需的代码感兴趣,即一旦在它们各自的类中设置了 bean,如何获取它的实例。

【问题讨论】:

    标签: java spring javabeans


    【解决方案1】:

    如果你想配置一直在上课,你可以这样做。

    @Configuration
    public class AppConfig {
       @Bean 
    public AccountManager accountManager() {
        return new AccountManager();
      }
    }
    

    或者如果你想使用xml然后

    <beans>
       <bean id = "accountManager" class = "packageName.AccountManager" />
    </beans>
    

    那么你可以在一个类中使用它,如下所示。

    @Autowired
    AccountManager accountManager ;
    

    【讨论】:

      【解决方案2】:

      要创建 AccountManager 的 bean,请执行以下操作:

      @Bean
      public AccountManager accountManager() {
          return new AccountManager();
      }
      

      【讨论】:

        【解决方案3】:

        如果您需要在对象中自动装配任何字段,您不能使用 new 实例化它,因为当您这样做时 Spring 不知道它。

        您可以执行以下操作:

        class MyClass{
            @Autowired
            ApplicationContext applicationContext;
        
            public void method(){
                AccountManager ac = applicationContext.getBean(AccountManager.class);
            }
        }
        

        如果 Spring 知道您的 AccountManager。在类上带有注释,例如@Component

        因为我不是 Spring-boot 的用户,所以我在这里找到了:How to get bean using application context in spring boot 如何以不同于我使用的方式获取 ApplicationContext

        【讨论】:

        • 感谢您的回复,是的,每个类都带有@Component 注释,我应该提到这一点。
        • 好吧,你所有的类都不需要用@Component注解,只需要你想让Spring管理的类
        • 但是从主方法我如何声明ApplicationContext?
        • 您只需在 ServerExchange 中自动装配它,或者在 Spring 中运行的代码中的任何位置,它应该与 Spring 一起提供
        • 其实我没有使用spring-boot。网上看了一下发现可以有一个类实现ApplicationContextAware来获取applicationContext。在这里找到:stackoverflow.com/questions/34088780/…
        猜你喜欢
        • 2016-10-20
        • 2017-11-24
        • 2012-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-07
        • 1970-01-01
        相关资源
        最近更新 更多