繁体   English   中英

如何在不更改Spring Boot中实际类的情况下远程创建Bean?

[英]How to create a bean remotely without changing the actual class in Spring Boot?

我的要求是@Autowire常规Java类而不更改它。 我看到的解决方案是通过使用@Component@Service注释该类,但是我无法更改实际的类。 我还有其他方法可以做到吗? 谢谢你的帮助。

您可以使用以下方法创建一个bean:

  • xml配置文件
  • 一个Java配置文件
  • Bean类上的注释( @Component@Service @Controller@Repository @Controller@Repository ...)

因此,您可以轻松使用前两种方法。 例如,您可以使用带有@Configuration注释的类:

@Configuration注释对类进行注释表示JavaConfig将使用该类作为bean定义

这是代码

@Configuration
public class MyConfig {

   @Bean
   public MyBean getMyBean() {
     MyBean myBean = ...

     return myBean;
   }
}

...

@Component
public class AnotherClass {

  @Autowired
  private MyBean myBean;

  ...
 }

更新了答案,并提供了与问卷评论相关的信息:

如果不能使用构造函数,则可以使用以下方法获取类的等距形式:

   @Bean
   public MyBean getMyBean() {
     MyBean myBean = MyBean.getInstance();

     return myBean;
   }

或者您可以在类中直接使用它而不使用@Autowired注释,因为不是为您实例化MyBean实例的spring而是getInstance方法。 该代码将变为:

@Component
public class AnotherClass {

                       // Creates (or get) the instance 
  private MyBean myBean = MyBean.getInstance();

  ...
 }

注意:如果您是TDD的拥护者,则第一种解决方案生成的代码要比第二种解决方案更易于测试,因为它没有直接引用静态getInstance方法的getInstance因此更易于生成模拟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM