本文主要是介绍@PostConstruct注解实现在servlet启动的时候执行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考:https://blog.csdn.net/qq360694660/article/details/82877222
@PostConstruct注解好多人以为是Spring提供的。其实是Java自己的注解。
Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:
Constructor(构造方法)
-> @Autowired(依赖注入)
-> @PostConstruct(注释的方法)
应用:在静态方法中调用依赖注入的Bean中的方法。
Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct
和@PreDestroy
,这两个注解被用来修饰一个非静态的void()方法。
public class FileUtil{@Autowiredprivate FileService fileService;public static String getFileAddress(){return fileService.getAddress();}
}
看上面这个这个工具类,不会报错,但是用到这个方法的时候,却会返回null,因为静态方法会先执行,但是还没注入,这就会导致问题产生。
所以我们可以改进一下:
public class FileUtil{@Autowiredprivate FileService fileService;private static String address="";@PostContructpubllic void init(){address=fileService.getAddress();}public static String getFileAddress(){return address;}
}
这样就巧妙的避开了,静态方法执行前,我们先给他一个默认值,当静态方法执行完后,再回去执行PostContruct修饰的方法,相当于还是给这个静态变量进行了赋值。
在静态方法中想用redis的数据
可以用这种方式类注入redisService的数据
Object cacheObj = SpringUtils.getBean(RedisService.class).getCacheObject(getCacheKey(key));
这篇关于@PostConstruct注解实现在servlet启动的时候执行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!