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

时间:2019-02-07 10:28:06

标签: java spring-boot

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

1 个答案:

答案 0 :(得分:5)

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

  • 一个xml配置文件
  • 一个java config file
  • Bean类上的
  • 注释(@Component@Service@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方法,因此更容易生成模拟。