美文网首页
解决Springboot 自动注入报空指针问题

解决Springboot 自动注入报空指针问题

作者: 进击的三文鱼 | 来源:发表于2019-05-07 16:56 被阅读0次

    最近做发送邮件的功能,因为邮件的种类有多种,所以使用了多态,工厂模式。建立了一个抽象接口,以及实现类,根据传入不同的邮件类型进行调用不同类中的方法。
    但是遇到了问题,在调用实现类时,发现实现类中自动注入的service不生效,全部为空。
    代码如下

         IShMessageEmailService shMessageEmailService;
            if (messageType.equals("etaMessage")) {
                shMessageEmailService = new ShMessageEmailEtaService();
                text = shMessageEmailService.getMessageText(dynamicEntity, sailingSchedule, messageType);
            } else if (messageType.equals("etdMessage")) {
                shMessageEmailService = new ShMessageEmailEtdService();
                text = shMessageEmailService.getMessageText(dynamicEntity, sailingSchedule, messageType);
            }
    
    @Service
    public class ShMessageEmailEtaService extends BusinessService implements IShMessageEmailService {
    
        @Autowired
        private ShManifestCargoService shManifestCargoService;
        @Autowired
        private ShipPortService shipPortService;
      @Override
        public String getMessageText(ShDynamic dynamic, SailingSchedule sailingSchedule, String messageType) {
            ShManifestCargo shManifestCargo = shManifestCargoService.findImpCargoAndBlNo(sailingSchedule.getId());
            String loadPortCode = "";
    

    检查后发现,又来是spring的service管理问题,如果用了spring管理bean 就不能自己new出来,然后修正了代码

    @Autowired
        private ShMessageEmailEtaService shMessageEmailEtaService;
        @Autowired
        private ShMessageEmailEtdService shMessageEmailEtdService;
    
     IShMessageEmailService shMessageEmailService;
            if (messageType.equals("etaMessage")) {
                shMessageEmailService = shMessageEmailEtaService;
                text = shMessageEmailService.getMessageText(dynamicEntity, sailingSchedule, messageType);
            } else if (messageType.equals("etdMessage")) {
                shMessageEmailService = shMessageEmailEtdService;
                text = shMessageEmailService.getMessageText(dynamicEntity, sailingSchedule, messageType);
            }
    

    这样就ok了。

    相关文章

      网友评论

          本文标题:解决Springboot 自动注入报空指针问题

          本文链接:https://www.haomeiwen.com/subject/vcryoqtx.html