使用@Autowired注入报空指针异常.
出现异常代码如下:
/**
* @program: iiossPlatform
* @description: 发送邮件策略
* @author: Mr.lxq
* @create: 2019-03-25 18:00
**/
@Component
public class EmailDistributionService implements DistributionStrategy{
@Autowired
private MailServiceImpl mailService;
@Autowired
private UserNotifyRepository userNotifyRepository;
private static Logger log = LoggerFactory.getLogger(EmailDistributionService.class);
@Override
@Async
public void send(DistributeMessage distributeMessage) {
log.info("进入到邮箱分发的消息"+distributeMessage.toString());
int userId = distributeMessage.getUserId();
log.info("访问数据库实体类>>>>"+userNotifyRepository);
UserNotify userNotify = proxy.userNotifyRepository.findUserNotifyByUserId(userId);
String email = userNotify.getEmail();
String alarmMsg = distributeMessage.getMessage().getAlarmMsg();
log.info("进入到了邮箱发送服务>>>>>>:"+email+"--"+alarmMsg);
proxy.mailService.sendSimpleMail(email,"告警提示", alarmMsg);
}
}
这里会出现注入失败,访问数据库实体类一直获取不到,后来找了公司大佬和网上查找,解决方法如下,使用一个本地变量在类中维持住引用.具体代码如下:
/**
* @program: iiossPlatform
* @description: 发送邮件策略
* @author: Mr.lxq
* @create: 2019-03-25 18:00
**/
@Component
public class EmailDistributionService implements DistributionStrategy{
@Autowired
private MailServiceImpl mailService;
@Autowired
private UserNotifyRepository userNotifyRepository;
private static EmailDistributionService proxy;
private static Logger log = LoggerFactory.getLogger(EmailDistributionService.class);
@PostConstruct
public void init (){
proxy=this;
}
@Override
@Async
public void send(DistributeMessage distributeMessage) {
log.info("进入到邮箱分发的消息"+distributeMessage.toString());
int userId = distributeMessage.getUserId();
log.info("访问数据库实体类>>>>"+proxy.userNotifyRepository);
UserNotify userNotify = proxy.userNotifyRepository.findUserNotifyByUserId(userId);
String email = userNotify.getEmail();
String alarmMsg = distributeMessage.getMessage().getAlarmMsg();
log.info("进入到了邮箱发送服务>>>>>>:"+email+"--"+alarmMsg);
proxy.mailService.sendSimpleMail(email,"告警提示", alarmMsg);
}
}
这里增加了一个静态变量,使用注解@PostContruct 将引用进行维持.再次使用就不会报错.
注意: 其他人也有出现因为包扫描路径不对而不能注入,需要进行注意!