浅谈@PostConstruct不被调用的原因
目录
- @PostConstruct不被调用的原因
- 如图
- @PostConstruct详解
- 定义
- 用法
- 作用
- 执行顺序
@PostConstruct不被调用的原因
如果在配置文件中配置使用,延迟加载的话
如图
被@Service等注解的类,需要在注入使用的时候,才会被初始化.如果TableInit类只是被定义而没有在其他地方引用的话,@PostConstrut注释的方法是不会执行的.
@PostConstruct详解
定义
@PostContruct是Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。
从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。
用法
@PostConstruct public void someMethod(){}
或者
public @PostConstruct void someMethod(){}
作用
@PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的。
执行顺序
其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象a和对象p,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowried注解,那么@Autowired注入是发生在A的构造方法执行完之后的。
如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么久无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。
Constructor >> @Autowired >> @PostConstruct
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
解决spring懒加载以及@PostConstruct结合的坑
目录 spring懒加载及@PostConstruct的坑 下面是一个初始化数据的组件 遗留问题 @PostConstruct注入不成功 直接先说原因吧 1.忽略ssm本身对注解是通过扫包才让注解有效的 2.忽略@Service的注解 3.注意扫包区间 4.@PostCoustruct注解用于 spring懒加载及@PostConstruct的坑 举例说明: 下面是一个初始化数据的组件 @Component public class InitData { /** * 初始化加载bean */ @
-
基于@PostConstruct注解的使用,解决向静态变量注入值
目录 @PostConstruct注解的使用,向静态变量注入值 说说思路 @PostConstruct和静态变量注入和spring初始化 执行顺序 关于spring初始化操作 @PostConstruct注解的使用,向静态变量注入值 今天在编写工具类时遇到了一个问题,一般在定义工具类方时,我们会将工具类中的方法定义成static类型,使用时可以通过类名.方法名获取该方法,无需实例化出对象才能使用其内部方法,但是当有些参数在配置文件中定义时,我们需要拿到这些参数就需要在工具类方法使用@Value注
-
SpringBoot @PostConstruct和@PreDestroy的使用说明
目录 1. @PostConstruct 1.1 概述 1.2 验证执行顺序 2. @PreDestroy 1. @PostConstruct 1.1 概述 @PostConstruct标记在方法上,在当前类的实例加入到容器之前,会先执行@PostConstruct标记的方法.它的执行顺序是这样的: 先执行当前类的构造函数 然后执行@Autowired标记对象的初始化 最后执行@PostConstruct标记的方法 如果没有抛出异常,则该对象加入Spring管理容器 1.2 验证执行顺序 创建一
-
springboot @PostConstruct无效的解决
目录 springboot @PostConstruct无效 解决办法 spring @PostConstruct的踩坑 在springboot程序启动过程中出现一个问题 springboot @PostConstruct无效 springboot 1.5.18,jdk9 @PostConstruct的方法并不执行,原因是jdk8以上的jdk使用了新的module系统,javax.annotation默认不可见. 解决办法 1.用jdk1.8 2.使用springboot 2.x 3.POM添加
-
浅谈SpringBoot中的Bean初始化方法 @PostConstruct
目录 注解说明 代码示例 注解示例 错误示例 正确示例 SpringBoot @PostConstruct虽好,也要慎用 1 问题的产生 2 案例模拟 3 总结 注解说明 使用注解: @PostConstruct 效果:在Bean初始化之后(构造方法和@Autowired之后)执行指定操作.经常用在将构造方法中的动作延迟. 备注:Bean初始化时候的执行顺序: 构造方法 -> @Autowired -> @PostConstruct 代码示例 注解示例 @Component public cl
-
SpringBoot使用@PostConstruct注解导入配置方式
目录 使用@PostConstruct注解导入配置 使用@PostConstruct注解,完成静态对象注入 为什么static对象不可直接使用@Autowired注入? @PostConstruct和@PreDestroy 使用@PostConstruct注解导入配置 通过@PostConstruct注解能够通过一种更友好的方式将配置进行导入 代码如下: /** * 引导类 * * @author zhangzhixiang * @date 2018/09/18 14:51:39 */ @Con
-
浅谈@PostConstruct不被调用的原因
目录 @PostConstruct不被调用的原因 如图 @PostConstruct详解 定义 用法 作用 执行顺序 @PostConstruct不被调用的原因 如果在配置文件中配置使用,延迟加载的话 如图 被@Service等注解的类,需要在注入使用的时候,才会被初始化.如果TableInit类只是被定义而没有在其他地方引用的话,@PostConstrut注释的方法是不会执行的. @PostConstruct详解 定义 @PostContruct是Java自带的注解,在方法上加该注解会在项目启
-
浅谈$_FILES数组为空的原因
今天做上传的文件时候,打印$_files总是为空,查阅了下资料. 发现是 max_file_uploads=0 知道了原因 file_uploads = On upload_max_filesize = 20M max_file_uploads = 20 以上这篇浅谈$_FILES数组为空的原因就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.
-
浅谈window.onbeforeunload() 事件调用ajax
经常有这样的需求,就是在离开某个web页面时,用户不一定点注销,这样会导致会话不能及时销毁.为实现用户离开页面时,自动注销功能,需要在web页面的onbeforeunload事件处理函数中发送注销命令.这个地方大多用Ajax实现.有时还涉及到跨域访问的问题.这个地方就存在浏览器的兼容性问题. 浏览器在处理这个需求时的不兼容性有如下两点: 1.处理Ajax时的不兼容性,这里使用jQuery来解决. 2.在发送Ajax请求时的不兼容性 主要代码如下: function logout() { var
-
浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题
如何:对 Windows 窗体控件进行线程安全调用 访问 Windows 窗体控件本质上不是线程安全的. 如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态. 还可能会出现其他与线程相关的 Bug,例如争用情况和死锁. 确保以线程安全方式访问控件非常重要. 在未使用 Invoke 方法的情况下,从不是创建某个控件的线程的其他线程调用该控件是不安全的. 以下非线程安全的调用的示例. // This event handler creates a thread that
-
浅谈list.removeAll()删除失败的原因及解决
未重写hashCode() 和 equals() 方法 ! 在实体类中重写这两个方法即可 ATTENTION:若实体类中还有实体类的属性,则该实体类也要重写这两个方法 (实际开发中存在删除失败的问题,待研究.暂采用Map删除方式) 实体类: public class User { private String name; private int age; private String sex; //private Company company; // Company 类也要重写 hashCod
-
浅谈python 调用open()打开文件时路径出错的原因
昨晚搞鼓了一下python的open()打开文件 代码如下 def main(): infile =open("C:\Users\Spirit\Desktop\bc.txt",'r') data = infile.read() print(data) main() 然而结果总报错invaild argument 或者cant found such file *** 查找问题后 发现是由于python中的 '\' 是转义符号,要想输出\ 的办法有两种 1 .在\后再加\ 就是\\ 的形式
-
浅谈js中调用函数时加不加括号的问题
其实总结起来如下: 函数只要是要调用它进行执行的,都必须加括号.此时,函数()实际上等于函数的返回值.当然,有些没有返回值,但已经执行了函数体内的行为,这个是根本,就是说,只要加括号的,就代表将会执行函数体代码. 不加括号的,都是把函数名称作为函数的指针,用于传参,此时不是得到函数的结果,因为不会运行函数体代码.它只是传递了函数体所在的地址位置,在需要的时候好找到函数体去执行. 所以一般时候我们都是采用的是无括号的原因.这也是由于括号的二义性,因为括号是"函数调用运算符",相当于在执行
-
浅谈Pycharm的项目文件名是红色的原因及解决方式
今天在继续学习Python时,打开Pycharm后,发现有一个项目下的项目文件名是红色的,如下图: 刚开始我以为是我升级 Pycharm导致的,但我并没有急着去解决,因为并不会影响我执行代码等.当我修改了一点代码后,我将它add并commit到Git后,才发现问题的原因:是我以前将Word设置成了Git的一个仓库,但是当时这些文件我并没有添加到Git里,所以会显示为红色.(这倒是挺好,可以提示我记得提交) 解决方法一: 如上我说的那样,add(add后会显示成绿色)并commit到Git(或者其
-
浅谈JVM内存溢出原因和解决思路
目录 栈溢出(虚拟机栈和本地方法栈) 产生原因 解决思路 堆溢出 产生原因 解决思路 方法区和运行时常量池溢出 产生原因 解决思路 本机直接内存溢出 产生原因 解决思路 栈溢出(虚拟机栈和本地方法栈) 产生原因 在HotSpot中,只能由-Xss参数来设定.因为在HotSpot中不区分虚拟机栈和本地方法栈的. 栈溢出时会出现两种异常:StackOverflowError异常和OutOfMemoryError异常. StackOverflowError异常因为线程请求的栈深度大于虚拟机允许的最大深
-
浅谈Python中对象是如何被调用的
目录 楔子 从 Python 的角度看对象的调用 从解释器的角度看对象的调用 小结 楔子 我们知道对象是如何被创建的,主要有两种方式,一种是通过Python/C API,另一种是通过调用类型对象.对于内置类型的实例对象而言,这两种方式都是支持的,比如列表,我们即可以通过[]创建,也可以通过list(),前者是Python/C API,后者是调用类型对象. 但对于自定义类的实例对象而言,我们只能通过调用类型对象的方式来创建.而一个对象如果可以被调用,那么这个对象就是callable,否则就不是ca
随机推荐
- 常见的数字验证正则表达式整理
- Redis String 类型和 Hash 类型学习笔记与总结
- js给table赋值的实例代码
- java去除已排序数组中的重复元素
- oracle11g管理员密码忘记怎么办 sqlplus解决忘记密码问题
- DOMXML函数笔记
- 实例分析ASP上传漏洞入侵实战及扩展
- Android中WebView加载的网页被放大的解决办法
- VBS中InputBox函数的返回值使用技巧
- 完美解决无法无法显示隐藏文件的问题(svohost.exe xsx.exe)
- C# DoubleClick与MouseDoubleClick区别,双击事件引发顺序
- flash 得到自身url参数的代码
- XmlUtils JS操作XML工具类
- javascript表单验证大全
- 修改hosts文件使apache绑定域名指向本机
- Android Dialog里的EdiText输入法的选择
- List集合对象中按照不同属性大小排序的实例
- 详解Python中的Descriptor描述符类
- Asp.net Socket客户端(远程发送和接收数据)
- C# Winform使用扩展方法实现自定义富文本框(RichTextBox)字体颜色