下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第解决spring懒加载以及@PostConstruct结合的坑目录spring懒加载及@PostConstruct的坑下面是一个初始化数据的组件遗留问题@PostConstruct注入不成功直接先说原因吧1.忽略ssm本身对注解是通过扫包才让注解有效的2.忽略@Service的注解3.注意扫包区间4.@PostCoustruct注解用于
spring懒加载及@PostConstruct的坑
举例说明:
下面是一个初始化数据的组件
@Component
publicclassInitData{
*初始化加载bean
@PostConstruct
publicvoidinit(){
MapString,Stringmap=newHashMapString,String
for(inti=0;ii++){
map.put(i+"",i+"");
//模拟加载一些别单例模式bean的数据初始化
ErrorMsgUtil1.getInstance().setMap(map);
ErrorMsgUtil2.getInstance().setMap(map);
好了,如果你开启了spring的懒加载模式,而且InitData这个bean只是被扫描而没有被注入,那么ErrorMsgUtil里的map永远是空的。
@PostConstruct实在bean初始化的时候被创建的,开启了懒加载显然如果InitData没有被用到那么就一直不执行了。
此坑已踩,小弟还是对spring理解不深,继续学习。
ps:如何开启spring的懒加载模式,在spring.xml中加上下面的代码中最后一句即可
xmlversion="1.0"encoding="UTF-8"
beansxmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"
xmlns:context="/schema/context"
xmlns:mvc="/schema/mvc"xmlns:tx="/schema/tx"
xsi:schemaLocation="
/schema/beans
/schema/beans/spring-beans-3.0.xsd
/schema/context
/schema/context/spring-context-3.0.xsd
"default-lazy-init="true"
遗留问题@PostConstruct注入不成功
前两天做了个纯java代码的rabbitMQ监听多个ip的客户端功能,由于用的不是配置方式的listener方式—博文中有这一节,无法自动启动。就用@PostConstruct来项目启动时运行监听mq,但是老遇到调用业务逻辑层方法时,注入不成功导致空指针异常。今天排查了一下,发现主要问题是框架扫包忽略了。
直接先说原因吧
1.忽略ssm本身对注解是通过扫包才让注解有效的
!--自动扫描该包,支持注解的层限制,把api这个controller层排除在外了。另外多个包中间用逗号或者分号隔开都可以。--
context:component-scanbase-package="com.**.service,com.**.action,com.**.common"
context:include-filtertype="annotation"expression="org.springframework.stereotype.Controller"/
context:exclude-filtertype="annotation"expression="org.springframework.stereotype.api"/
/context:component-scan
2.忽略@Service的注解
由于扫包是扫service层和action层(相当于service层),common工具层。所以在api层(相当于controller层)用@Service和不用注解都是错误的,都会导致注入失败。
3.注意扫包区间
出了这个范围@PostConstruct是无效的。应用在启动时是不会走带有这个注解的方法的。
4.@PostCoustruct注解用于
在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法所在的类必须放入服务之前调用。也就是该注解的类上不能随便注解:经验总结是能用@Service注解,不能用@Controller注解,否则启动不会走这个方法。这个类定位为服务层/业务层。而不是控制层(web层)
有了上面说的注意点。我重新在工具类包common包中写了个测试类。然后spring配置文件上扫包范围增加了这个common包。代码如下:mon.cache.CommonCacheMap.java
packagemon.cache;
importjavax.annotation.PostConstruct;
importjavax.annotation.Resource;
importorg.springframework.stereotype.Service;
importcom.zlf.bo.StaffBo;
importcom.zlf.service.IStaffService;
@Service("CommonCacheMap")
publicclassCommonCacheMap{
@Resource
privateIStaffServicestaffService;
@PostConstruct
publicvoidgetOneStaff(){
StaffBostaffBo=staffService.selectByPrimaryKey(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 骨科护理技术操作规范
- 大肠息肉术后运动康复护理
- 预见性护理在康复护理中的应用
- 药物应用护理中的持续质量改进
- 内镜间质瘤患者的心理护理与支持
- 南京公务员试题及答案
- 教案-单元六任务1证件照制作-美图秀秀
- (二)安全用电试卷附答案
- 刨花板铺装工核心实操评优考核试卷含答案
- 薪税师合规测试考核试卷含答案
- 作文格子纸(小学生专用Word版)
- 八年级地理第三次月考试卷
- 贵州义华实业有限责任公司煤矸石提硫建设项目环评报告
- 个人嘉奖登记(报告)表(无水印)
- 泌乳奶牛营养需要
- 水利工程施工监理规范SL288-2014标准参考
- DL-T 1083-2019 火力发电厂分散控制系统技术条件
- 六三制新青岛版四年级下册科学第16课《动物的“家”》课件
- LY/T 2810-2017结构化森林经营技术规程
- GB/T 14996-2010高温合金冷轧板
- 人工起道捣固作业考评表(工务专业)
评论
0/150
提交评论