首页 > 其他分享 >IDEA Spring-boot 使用@Component注解的工具类,用@Autowired注入 @Service或者@Repository 会空指针(使用@PostContruct )

IDEA Spring-boot 使用@Component注解的工具类,用@Autowired注入 @Service或者@Repository 会空指针(使用@PostContruct )

时间:2023-04-03 20:02:09浏览次数:61  
标签:PostContruct 初始化 Service Autowired zKK PostConstruct 注解 注入

IDEA Spring-boot 使用@Component注解的工具类,用@Autowired注入 @Service或者@Repository 会空指针(使用@PostContruct )
原文链接:https://blog.csdn.net/ld_secret/article/details/104627597/

使用idea编译器时,对于spring-boot的项目,大都使用注解,那么:

一、现象:@Component标注的Util类,用@Autowired自动导入 @Service和@Repository会报空指针

二、原因:网上查阅的文章说,无法持久化引用

三、解决方法:

         1、增加一个静态变量:  private static ClassNameUtil.java zKK;

         2、使用注解@PostContruct ,让该util在启动spring时,执行初始化方法(这样util才存在,才可以注入其他)

         3、调用方式:工具类名.引用类名.方法名(zKK.devicesRe.methd())

         4、例子:

  1. @Component
  2. public class ZKAndKafkaManageUtil implements IServiceControlCommonOperation{
  3. @Autowired
  4. DevicesRepository devicesRe;
  5. private static ZKAndKafkaManageUtil zKK; //1、加个静态变量
  6. @PostConstruct //2、加个注解并初始化
  7. public void init (){
  8. zKK=this;
  9. }
  10. //3、引用,特别注意:引用方式为: 工具类名.引用类名.方法名(zKK.devicesRe.methd())
  11. public void test2(){
  12. zKK.devicesRe.findDeviceByIpv4Addr("222.143.1.193");
  13. }

注解拓展:

1、@PostContruct是spring框架的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法

2、spring中Constructor、@Autowired、@PostConstruct的顺序

其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象p与对象a,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowired注解,那么@Autowired注入是发生在A的构造方法执行完之后的。

如果想在生成对象时候完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。

Constructor(构造) >> @Autowired(注入) >> @PostConstruct(调用)

  1. public Class AAA {
  2. @Autowired
  3. private BBB b;
  4. public AAA() {
  5. System.out.println("此时b还未被注入: b = " + b);
  6. }
  7. @PostConstruct
  8. private void init() {
  9. System.out.println("@PostConstruct将在依赖注入完成后被自动调用: b = " + b);
  10. }
  11. }

参考网址:

https://blog.csdn.net/weixin_42911069/article/details/88849789

https://www.cnblogs.com/kelelipeng/p/11309591.html

https://www.cnblogs.com/zxf330301/p/9265718.html

标签:PostContruct,初始化,Service,Autowired,zKK,PostConstruct,注解,注入
From: https://www.cnblogs.com/sunny3158/p/17284208.html

相关文章

  • Service Mesh之Istio基础入门
    技术背景分布式服务治理所谓分布式服务治理就是对服务不断增长的复杂度的管控和管理;管控及管理包含网络拓扑变动、网络延时、通信安全、API网关、服务注册和发现、服务熔断容错、服务超时重试、服务部署、数据调用、分布式链路追踪等等;服务治理历程第一代......
  • Windows Service Wrapper(winsw.exe)
     用winsw让任何Windows程序都能运行为服务详解WindowsServiceWrapper(winsw.exe)及应用场景 ......
  • 【Azure 应用服务】Function App / App Service 连接 Blob 报错
    问题描述因Blob启用了防火墙功能,但是当把AppService或FunctionApp的出站IP地址都加入到Blob的白名单中,为什么访问还是403错误呢? 问题解答AzureStorage的IP网络规则不适用于同一数据中心的客户端。存储帐户部署在同一区域中的服务使用专用的AzureIP地址进行通信。因此,不......
  • 【Azure 应用服务】在创建App Service时,遇见“No available instances to satisfy thi
    问题描述在创建新的AppService,遇见了资源不满足当前需求的提示。详细消息为:"Code":"Conflict","Message":"Noavailableinstancestosatisfythisrequest.AppServiceisattemptingtoincreasecapacity.Pleaseretryyourrequestlater.Ifurgent,thi......
  • window service 2012 R2 0x8007000d
    今天遇到了一个很无语的问题,我的一个.netcore项目,部署到IIS上之后,启动网站,报500.19的错误。尝试了网上N种办法始终没办法解决,最后重装了我的.netcore,解决了。 第一步:  第二步:  第三步:卸载掉.netcore程序   第四步:重装第三步中的.netcore 如果还......
  • @AutoWired和@Resource有什么区别
    @Autowired和@Resource都是用于进行依赖注入的注解,但是它们有以下几个区别:来源不同:@Autowired是Spring提供的注解,而@Resource是JavaEE提供的注解,不过Spring也支持使用@Resource进行依赖注入。默认依赖查找方式不同:@Autowired默认使用类型匹配的方式进行依赖查找和......
  • ansible 常用模块 service
    模块说明Manageservices参数说明ParameterCommentsargumentsaliases:argsstring命令行上提供了其他参数。将远程主机与systemd一起使用时,此设置将被忽略。enabled boolean服务是否应在启动时启动。至少需要state和enabled中的......
  • IntentService入门
    IntentService提供的功能是来处理异步工作的。 工作流程也非常简单,客户端通过startService(Intent)方法来调用,服务启动后,开启worker线程来顺序处理intent的任务。注意这里,一个intentService可以处理多个任务,只不过是一个接着一个的顺序来处理的;AsyncTask通常情况是每个任务启动......
  • 【Azure 应用服务】Function App / App Service 连接 Blob 报错
    问题描述因Blob启用了防火墙功能,但是当把AppService或FunctionApp的出站IP地址都加入到Blob的白名单中,为什么访问还是403错误呢? 问题解答AzureStorage的IP网络规则不适用于同一数据中心的客户端。存储帐户部署在同一区域中的服务使用专用的AzureIP地址进行通信。......
  • 36、K8S-安全机制-ServiceAccount(SA)
    1、基础知识1.1、场景基础1.1.1、应用场景对于任何一种应用场景,其权限的认证管理都是非常重要的,对于linux系统来说,selinux、防火墙、pam、sudo等等,其核心的目的都是为......