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

标签 java spring-boot

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

最佳答案

您可以创建一个 bean:

  • 一个xml配置文件
  • 一个java config file
  • 注释(@Component@Service@Controller@Repository...) bean 类

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

Annotating a class with the @Configuration annotation indicates that the class will be used by JavaConfig as a source of bean definitions.

这是代码

@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 注释,因为不是 spring 为您实例化 MyBean 实例,而是 getInstance 方法。代码将变为:

@Component
public class AnotherClass {

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

  ...
 }

注意:如果您是 TDD 的粉丝,第一个解决方案生成的代码比第二个更容易测试,因为没有直接引用静态 getInstance 方法,因此更容易生成模拟。

关于java - 如何在不更改 Spring Boot 中的实际类的情况下远程创建 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54571217/

相关文章:

java - 如何在 Java 中将 byte[] 转换为 float[] 并返回?

java - JPA 查询 - 如何混合任意查询字符串和 CriteriaBuilder

java - 数组是否在 jOOQ 和 PostgreSQL 中进行了优化?

java - junit 流图 Java 8

java - 我如何找出方法所在的库?

java - 奇怪的java字符串比较运算符

java - 有什么方法可以将自定义字段发送到 mongo 存储库进行搜索吗?

spring - Autowired 不适用于 Spring 中的 ConfigurationProperties bean

spring - 硬限制连接 Spring Boot

java - 错误:java package xxx does not exist despite IDEA being aware of them