在某些情况下,类的构造函数可能需要访问类中的@Autowired字段。然而,默认情况下,在类的构造函数被调用之前,@Autowired字段并不可用。为了解决这个问题,可以使用以下解决方案:
在类中声明一个有参构造函数,使用@Autowired注解该构造函数参数。在构造函数中完成对@Autowired字段的访问,这样可以确保@Autowired字段在类的构造函数中可用。
示例代码:
@Component
public class MyService {
private final Dependency dependency;
@Autowired
public MyService(Dependency dependency) {
this.dependency = dependency;
// Access to the autowired field is available
// within the constructor
dependency.someMethod();
}
public void doSomething() {
// Access to the autowired field is available
// within other methods
dependency.someMethod();
}
}
如果类已经被Spring容器实例化,并且@Autowired字段已经设置值,可以使用InitializingBean接口完成对@Autowired字段的访问。
示例代码:
@Component
public class MyService implements InitializingBean {
@Autowired
private Dependency dependency;
@Override
public void afterPropertiesSet() throws Exception {
// Access to the autowired field is available
// in afterPropertiesSet method
dependency.someMethod();
}
public void doSomething() {
// Access to the autowired field is available
// within other methods
dependency.someMethod();
}
}
以上两种方法都能够确保@Autowired字段在类的构造函数中可访问。