17. Spring的bean以及依赖注入

您可以自由使用任何标准的Spring Framework技术来定义您的bean及其注入的依赖。为简单起见,我们经常发现结合@Autowired构造方法注入来使用@ComponentScan查找bean效果非常好。

如果您按照上述建议(将您的application类放置于根包中),则可以添加@ComponentScan注解而无需任何参数。您所有的程序组件(@Component@Service@Repository、`@Controller等)都会自动注册为Spring的bean。

这是一个使用构造方法注入获取所需的RiskAssessorbean的@Servicebean的例子。

package com.example.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DatabaseAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    @Autowired
    public DatabaseAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}

而且,如果一个bean只有一个构造方法,可以省略@Autowired

@Service
public class DatabaseAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    public DatabaseAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}

请注意,使用依赖构造方法注入是如何允许将riskAssessor字段标识为final的,这表示该字段之后不能更改。


书籍推荐