因为平时在调用service层时都是在controller中,有配置扫描注入,spring会根据配置自动注入所依赖的服务层。
但因我们写的工具类不属于controller层,所以当所写接口需要调用服务层是,常常会为NULL。
下面就分享一个实践后可行的办法,如下图所示:
第一种:
@Component //申明为spring组件
public class TestUtils {
@Autowired
private TestService testService; //添加所需service的私有成员
private static TestUtils testUtils ; // 关键点1 静态初使化 一个工具类 这样是为了在spring初使化之前
public void setTestService(TestService testService) {
this.testService = testService;
}
@PostConstruct //关键二 通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
public void init() {
testUtils = this;
testUtils.testService = this.testService; // 初使化时将已静态化的testService实例化
}
}
这样下面的代码中就可以通过 testUtils.testService 来调用service处理
第二种:
主要是:1.将此工具类加上@Component注解
2.将所需调用的服务类设置成静态属性,并通过方法直接将服务层设置成工具类自己的属性即可。