spring - 如何使用spring来解决手动创建的对象的依赖关系?

标签 spring dependency-injection

我想知道是否可以使用 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/

相关文章:

spring - 在batchUpdate中使用NamedParameterJDBCTemplate时如何获取生成的 key

java - Spring-WS WebServiceTemplate : What is the difference between HttpUrlConnectionMessageSender and HttpComponentsMessageSender?

spring - 如何为 Spring MVC 添加简单的分页

c# - 使用依赖注入(inject)进行硬件抽象

spring-mvc - Java WAR - 从外部 JAR 加载 Spring bean

dart - 如何在Riverpod中监听ProviderContainer的变化?

java - WFLYEJB0137 : Only session and message-driven beans with bean-managed transaction demarcation are allowed to access UserTransaction

dependency-injection - DI 容器 : Howto pass configuration to objects

java - Cause=slf4j 依赖冲突 - NoSuchMethodError : org. slf4j.helpers.MessageFormatter.format

java - 访问 Camel Freemarker ftl 中的 RequestParameters