我想知道是否可以使用 Spring 来解决在我的程序中手动创建的对象的依赖关系。看看下面的类:
public class TestClass {
private MyDependency md;
public TestClass() {
}
...
public void methodThaUsesMyDependency() {
...
md.someMethod();
...
}
}
这个TestClass不是spring bean,而是需要MyDependency,也就是spring bean。有什么方法可以通过 Spring 注入(inject)这种依赖关系,即使我在代码中使用 new 运算符实例化 TestClass ?
谢谢
最佳答案
编辑:我在下面的原始答案中描述的方法是在容器外部完成 DI 的一般方法。对于您的特定需求 - 测试 - 我同意 DJ 的回答。使用 Spring 的测试支持更为合适,例如:
@Test
@ContextConfiguration(locations = { "classpath*:**/applicationContext.xml" })
public class MyTest extends AbstractTestNGSpringContextTests {
@Resource
private MyDependency md;
@Test
public void myTest() {
...
虽然上面的示例是一个 TestNG 测试,但在 8.3.7.2. Context management and caching 中还解释了 Junit 支持。 .
一般方法:使用 注释您的类(class)@可配置并利用 AspectJ 加载时或编译时编织。见 6.8.1 in the Spring documentation on AOP更多细节。
然后你可以用 注释你的实例变量。 @资源 或 @Autowired .尽管它们实现了依赖注入(inject)的相同目标,但我建议使用 @资源 因为它是 Java 标准而不是 Spring 特定的。
最后,记得考虑使用 transient 关键字(或 @Transient 对于 JPA),如果您计划在将来序列化或持久化对象。您可能不想序列化对您的 DI 存储库、服务或组件 bean 的引用。
关于spring - 如何使用spring来解决手动创建的对象的依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1805021/