多线程程序为防止数据报被拦截转而多次并发请求,项目中使用单例模式利用缓存拦截。使用饿汉式单例类过程中发现在单例类调用@Autowired 注入的bean出现 nullpoint问题,考虑应该是static类对象创建后内存中没有注入的bean信息,调用时无法初始化bean对象实例。
解决方法:使用@PostConstruct 修改单例类对象信息。
饿汉式单例类 :
@Service
public class Singleton {
private static Singleton singleton= new Singleton ();
@Autowired
private RedisTemplate<String, Object> redisTemplate;
private Singleton () {
}
public static Singleton newInstance() {
return singleton;
}
/*@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行*/
@PostConstruct
public void init() {
singleton = this;
singleton.redisTemplate = this.redisTemplate;
}}