Java Spring工具类加载Serivce @PostConstruct注解在工具类的作用

1、 @PostConstruct 介绍

@PostConstruct 是Java 自己的注解,非Spring 提供。
注解的说明: 该注解来修饰一个非静态的void() 方法。服务器加载Servlet的时候运行,并且只会被服务器执行一次。 PostConstruct 构造函数之后执行,init()方法之前执行。

在这里要了解java 加载类的顺序
(1) 父类静态对象和静态代码块
(2) 子类静态对象和静态代码块
(3) 父类非静态对象和非静态代码块
(4) 父类构造函数
(5) 子类 非静态对象和非静态代码块
(6) 子类构造函数

所以加载 后面的顺序
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)

@PostConstruct 注解作用于方法上原因

  把Spring依赖注入的Service 资源,转移到static 对象上。

@PostConstruct 是怎么把Service 注入的资源调用,而不是null (对象变了)

[外链图片转存失败,源站可能有防盗在这里插入!链机制,建描述]议将图片上https://传(imbog.csdnimg.cn/2021031917191489.png?-oss-process=image/watermark,type_ZmFuZ3poxWYn8dZ5aGVpdGk,shadow_10,text_aHR0cHM61Ly9ibG9nLmNzZG1ubmV0L3dvYnVzaGl5aWNhaW5pYW8=,size_56,color_FFFFFF,t_708(https://img-是是是blog.csdnimg.cn/2021031917191489.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dvYnVzaGl5aWNhaW5pYW8=,size_16,color_FFFFFF,t_70)]

为什么要声明一个static 类

作用: Spring依赖注入资源到iWorkSheetService时, 用 static Class 保存当前注入的资源。
使用的时候 通过static.service 调用,此时的 资源是Spring 注入的。 如果直接调用不能保证是同一个对象,而且对象里面的Serivce 是 null。

静态属性 workSheetNoCodeRule = this 作用

1、当@Autowired 注入资源到iWorkSheetService 时,运行PostConstruct声明的方法 workSheetNoCodeRule = this 相当于 this(当前对象Service已经被Spring注入资源) 的属性和方法,赋值给了静态变量。上面system.out 输出可以看出,this 和 static 地址是一样的。

2、为什么赋值给静态变量
静态变量是属于类的,而不是对象,通过静态调用来确认是同一个对象, 静态对象里面的Service是S

3、 workSheetNoCodeRule.iWorkSheetService = this.iWorkSheetService;这端代码可以不要,因为
workSheetNoCodeRule = this 的时候已经赋值了, 属于重复赋值了。

在方法里调用

在这里插入图片描述
当写方法调用 Service调用的时候, 我这里不是静态方法,如果是静态方法, 还必须要使用static.service 去调用, 如果不是静态方法也必须使用 static.service 方法,而不是 service或者this.service去调用,因为对象发生了改变,不是同一个对象,不是同一个对象,不是同一个对象!!!!

可以从打印地址看出, 对象发生了改变,不是同一个对象 , 我这里是通过反射 调用的,对象发生了改变。

也可以 Class.static.methods 去调用, 但是 static 方法里必须要使用 静态的属性和变量。

Spring 注入的方式资源的三种方式: 接口,set,构造器

我这里是通过接口的方式注入。

总结:

     我找了很多资料,也无法理解   static =this  赋值是为什么,我想了一个星期, 回顾了spring注入的方式,static 作用,this的用法, 然后通过调用测试, 才理解其中的意思。
 第一次写博客,同时也记录一下,代码的问题,能是自己应该更加深刻!  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值