前两天做了个纯java代码的rabbitMQ监听多个ip的客户端功能,由于用的不是配置方式的listener方式—博文中有这一节,无法自动启动。就用@PostConstruct来项目启动时运行监听mq,但是老遇到调用业务逻辑层方法时,注入不成功导致空指针异常。今天排查了一下,发现主要问题是框架扫包忽略了。

直接先说原因吧:
1.忽略ssm本身对注解是通过扫包才让注解有效的

<!-- 自动扫描该包,支持注解的层限制,把api这个controller层排除在外了。另外多个包中间用逗号或者分号隔开都可以。 -->
<context:component-scan base-package="com.**.service,com.**.action,com.**.common" ><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/><context:exclude-filter type="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包。代码如下:com.zhanglf.common.cache.CommonCacheMap.java

package com.zhanglf.common.cache;import javax.annotation.PostConstruct;
import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.zlf.bo.StaffBo;
import com.zlf.service.IStaffService;@Service("CommonCacheMap")
public class CommonCacheMap {@Resourceprivate IStaffService staffService;@PostConstructpublic void getOneStaff(){StaffBo staffBo = staffService.selectByPrimaryKey("s01");System.out.println(staffBo.getName());}
}

结果是注入成功,运行结果如下:

这样@PostConstruct注入问题就解决了。哈哈

解决遗留问题:@PostConstruct注入不成功相关推荐

  1. 【docker】解决docker启动centos镜像不成功问题

    解决docker启动centos镜像不成功问题 当我们用docker 启动centos镜像后,并不会启动成功,而是启动后立马停止. root@dockergeng:~# docker run cent ...

  2. python环境配置不成功_怎么解决python配置环境变量不成功

    怎么解决python配置环境变量不成功 发布时间:2020-08-25 16:02:46 来源:亿速云 阅读:94 这期内容当中小编将会给大家带来有关怎么解决python配置环境变量不成功,文章内容丰 ...

  3. 1.解决python中导入包不成功的问题(出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url问题)

    一.问题描述:出现导入包不成功的问题 大致描述如下图所示 二.产生问题的原因和解决方法 2.1 这种问题出现的原因一般是因为镜像,默认镜像源访问速度过慢,会导致超时从而导致更新和下载失败 2.2 解决 ...

  4. Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法(终极方法,不成功来找我~)

    pycaharm运行tensorflow或是其它模块时出现"ImportError:DLL load failed:找不到指定模块",一般是没有设置环境变量,或是anaconda安 ...

  5. vivo S16/S15/S12/S10 PRO卡刷线刷系统升级降级推荐成功解决屏幕锁不记得开机锁成功刷好的有效方案

    vivo S16/S15 PRO,vivo S12/S10 PRO怎么解锁呢.忘记密码了看了一些刷机解锁视频不拆机能解锁的方法修改密码清除锁定升级更新降版本固件系统资料原方包刷机教程太卡怎么降级到原来 ...

  6. 最新注册谷歌账号遇到此号码无法验证的解决办法_看我如何成功注册gmail

    许多朋友注册谷歌账号的时候遇上手机号无法验证的问题,那到底怎么才能注册谷歌Gmail邮箱呢?其实自己的手机号是可以成功注册验证谷歌的,不用想着用外国手机号申请,也不要用虚拟运营商的手机号,都是无法通过 ...

  7. 群晖设置腾讯云ddns显示认证失败的两种解决办法【实测第二种成功了】

    群晖腾讯云ddns显示认证失败 背景: 问题: 前提条件 解决办法一:群晖自带的ddns解析 步骤1:获取 API 密钥信息 步骤2:群晖(Synology)NAS 配置 DDNS 解决办法二:利用D ...

  8. 巧为tomcat插件配置log4j日志,解决未报错启动不成功

    前情摘要 源于Maven项目中整合SSM框架后,运行一个根据商品id查询商品信息的Demo来测试是否整合成功. 在pom文件中配置好Tomcat插件,启动tomcat,如果成功,输出信息如下: May ...

  9. Istio 解决的问题及注入

    Istio 解决的问题 istio所要解决的问题就是流量的管控,之前在pod里面增加了sidecar haproxy就是用来做流量管控的. 如果配置了istio就不需要手动的为每个pod去添加side ...

最新文章

  1. M产品研发日志(4)---项目出差
  2. Tomcat的安装与配置(新手向)
  3. python的应用包括哪些_Python应用领域有哪些?
  4. LeetCode MySQL 1098. 小众书籍
  5. PHP-FPM Fastcgi 未授权访问漏洞(端口9000)
  6. 再获国际顶级荣誉,平头哥首席科学家谢源荣获2020年度IEEE CS技术成就奖
  7. 中兴有救了!百度又要 All in 视频?联想回应“反对预装国产系统” | CSDN极客头条...
  8. 大数据可视化面临哪些挑战
  9. Atitit 通过调用gui接口杀掉360杀毒 360卫士  qq保镖等难以结束的进程(javac# php )
  10. Docker Centos安装Openssh
  11. 创建 VSTO 工作簿的 ClickOnce 安装包
  12. 图文实例带你了解香农编码和霍夫曼编码
  13. 这就是我不建议去外包公司开发的原因?
  14. cocos creator编写简易游戏摇杆以及通过摇杆控制精灵移动
  15. dsolve解微分方程
  16. HELIOS模拟平台介绍
  17. k8s中Pod域名解析失败
  18. 如何治理 Electron 版本淘宝直播应用崩溃?
  19. Event-Souring模式
  20. 论文阅读《Visual Measurement Integrity Monitoring for UAV Localization》

热门文章

  1. 学会origin这20个操作,作图快速又完美
  2. 后台工作者HangFire与ABP框架Abp.Hangfire及扩展
  3. 学校没有邮箱怎么办?如何申请注册学生个人教育邮箱?
  4. 如何制造一个Android智能手机
  5. 二次元看过来!基于 Serverless 的舞萌音游查分器
  6. 免费:商业的未来(中)
  7. 销售员有什么途径可以快速找到客户资源?
  8. Lambda表达式,Stream流,方法引用,Base64(JDK8新特性)
  9. 坑!!!高清解决方案导致iOS 上h5页面滑不动的解决办法
  10. 如何彻底释放iPhone中被“其他”占用的空间