代码中使用new创建的对象中的@Autowired属性不会被自动装配注入;
若类A中包含成员属性B, B是通过@Autowired自动注入,而类A的实例是通过new的方式产生,则自动注入会失效的。
解决办法是使用 spring上下文的方法获取对象
伪代码:ClassBInterface b = (ClassBInterfaceImpl) ServiceLocator.getBean("classBInterfaceImpl");
ServiceLocator获取对象工具类具体实现如下
// 获取spring对象的工具类,这个工具类是springboot扫描自动装入spring容器的,在需要使用的地方,即不能自动装配的类的方法中 如下方式使用就行了
NettyClientService nettyClientService = (NettyClientService) ServiceLocator.getBean("nettyClientServiceImpl");
@Component
public class ServiceLocator implements ApplicationContextAware {
private static ApplicationContext context;
@Autowired
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
public static ApplicationContext getApplicationCont