如果要在构造器里引用其他被依赖的bean来初始化类的变量,较好的实现方式是
- 用@Autowired注解构造函数
- 并且增加一个有依赖关系的传参
- 同时类变量也用@Autowired注解以便其它函数使用(不必在构造函数里使用this.client = client;这种方式来手动赋值)。
@Service
public class StoreService {
@Autowired
private Client client;
private final Store store;
@Autowired
public StoreService(Client client) {
this.store = client.getStore();
}
public void doLogic(){
this.client.print();
this.store.print();
}
}
还有一种方式是另外写一个初始化函数并用@PostConstruct注解,但这种方式有个缺点是不能初始化final的类变量。
@Service
public class StoreService {
@Autowired
private Client client;
private Store store;
public StoreService() {
}
@PostConstruct
private void init() {
this.store = client.getStore();
}
public void doLogic(){
this.client.print();
this.store.print();
}
}