问题再现
兄弟们,看见了吗?这里我@Autowired进来的forkliftService 居然为null 且我SysForkliftServiceImpl上面是加了@Service注解的
分析原因
主要原因就是因为该类继承了一个第三方框架SimpleChannelInboundHandler,在执行的过程中,它是被人家框架内部创建实例然后去调用的,这就导致了可能在内部new过这个对象了,所以就导致了@Component对这个类根本不起作用。
解决办法
创建一个MyBeanUtil
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class MyBeanUtil implements ApplicationContextAware {
protected static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext app) throws BeansException {
if (applicationContext == null) {
applicationContext = app;
}
}
/**
* 通过类的class从容器中手动获取对象
*/
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
}
然后不用 @Autowired,改用我们的工具类
ISysForkliftService forkliftService = MyBeanUtil.getBean(ISysForkliftService.class);
这样就能获取到对象了,下课!