繁体   English   中英

Spring依赖注入到具有构造函数的类

[英]Spring dependency injection to a class with a constructor

我对整个 spring 依赖注入有点陌生。 有一件事我不明白,希望有人可以为我澄清......

我有一个服务:

@Service
public class Service {...}

另一个类:

public class A{
   @Autowired
   private Service service;
   ...
}

在这种情况下,Service 将按预期注入到 A 类中。 据我所知,A 类中不能使用构造函数,否则注入将不起作用。 有没有办法在 A 类中使用构造函数并同时注入 Service? IE:

public class A{
       @Autowired
       private Service service;

       private String a;
       private int b;
       public A(String a,int b){
        this.a = a;
        this.b = b;
       }
    }

在这种情况下,我得到该服务为空,无论如何要解决这个问题? 我希望能够使用注入了服务的“new”从类型 A 创建一个对象,这可能吗?

谢谢。

重要的一点是你的两个类都应该是 Spring bean。

这反过来意味着所有实例化都将由 Spring 容器完成。 要了解如何正确处理基于构造函数的依赖注入,请查看参考文档的这一点

如果无论如何,您不能将A类设为 Spring bean,那么推荐的方法是使用@Configurable对其进行注释,这将在创建时自动装配依赖项。

请注意,为此,您需要启用方面。 我做了一个快速搜索,发现这个博客似乎很好地解释了细节

有。 您应该在 Spring 配置类(用@Configuration注释)中手动创建服务类的实例,并用@Service而不是类来注释创建实例的方法。

因此,作为示例,您的应用程序可能具有如下所示的 Spring 配置:

@Configuration
public class MyApplicationConfig {
    @Bean
    public Service myService() {
        return new Service("hello", "world", 42); // ctor args as an example
    }
}

还有你的服务类:

// need fully qualified class because your class has the same name
@org.springframework.stereotype.Service
public class Service {
    public Service(String prefix, String suffix, int number) {
        // Whatever
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM