我的要求是 @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/