我的要求是@Autowire
常规 Java类而不进行更改。我看到的解决方案是使用@Component
或@Service
注释该类,但我无法更改实际的类。我还有其他方法可以做到吗?感谢您的帮助。
答案 0 :(得分:5)
您可以使用以下方法创建一个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
方法,因此更容易生成模拟。