问题再现
兄弟们,看见了吗?这里我@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);
这样就能获取到对象了,下课!