使用构造函数对类进行Spring依赖注入

时间:2016-10-08 09:13:02

标签: java spring spring-mvc dependency-injection

我对整个春季依赖注入都有点新意。 有一件事我不明白,希望有人可以为我清楚......

我有服务:

@Service
public class Service {...}

另一堂课:

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

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

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类型的对象。注入服务,这可能吗?

感谢。

2 个答案:

答案 0 :(得分:1)

有。您应该在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
    }
}

答案 1 :(得分:0)

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

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

的这一位

如果无论如何,你不能使一个类for line in file: line.split(',') A = firstsplit B = secondsplit 成为一个Spring bean,而不是推荐的方法是使用A来注释它,它会自动依赖创建时间。

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