@PostConstruct和static静态块初始化的区别

摘要:
组件的依赖项尚未初始化。这就是代码块将报告空指针异常的原因。1.@PostConstruction注释方法在类的构造函数加载后执行,即在构造函数加载后。为此,可以使用@PostConstruction注释方法来完成初始化。依赖注入完成后,将自动调用@PostConstruction注释方法。2.如果执行优先级高于非静态初始化块,则在类初始化时执行一次,在执行完成时销毁。它只能初始化类变量,即静态修改的数据成员。

static blocks are invoked when the class is being initialized, after it is loaded. The dependencies of your component haven't been initialized yet. That is why you get a NullPointerException (Your dependencies are null) .

Move your code to a method annotated with @PostConstruct. This will ensure that your code will run when all the dependencies of your component are initialized
译文:static模块会被引入,当class加载后。你的component组件的依赖还没有初始化。这就是为什么你的代码块会报空指针异常。(你的依赖都是null)

1,@PostConstruct 注解的方法在加载类的构造函数之后执行,也就是在加载了构造函数之后,

为此,可以使用@PostConstruct注解一个方法来完成初始化,

@PostConstruct注解的方法将会在依赖注入完成后被自动调用。

2,执行优先级高于非静态的初始化块,它会在类初始化(类加载的初始化阶段)的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。

初始化失败:

static {
strategyMap.put(SYSTEM, applicationContext.getBean(XXX.class));
   System.out.println("初始化完成" + strategyMap.size());
}

初始化成功:

@PostConstruct
void init() {
strategyMap.put(SYSTEM, applicationContext.getBean(XXX.class));
System.out.println("初始化完成" + strategyMap.size());
);
}

免责声明:文章转载自《@PostConstruct和static静态块初始化的区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FPS游戏:实现狙击子弹加速自动化装机系统下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python面试题库——1Python基础篇

第一部分 Python基础篇(80题) 为什么学习Python?             语言本身简洁,优美,功能超级强大,跨平台,从桌面应用,web开发,自动化测试运维,爬虫,人工智能,大数据处理都能做         Python和Java、PHP、C、C#、C++等其他语言的对比?                C语言由于其底层操作特性和历史的积累...

第十章 数组和指针

一 数组 数组由一系列相同的元素构成。 告诉编译器需要一个数组的方式叫数组声明(array declaration),声明需要告诉编译器数组元素的个数和类型。  初始化 int main(void) {   int powers[8] = {1,2,4,8,16,32,64,128};  ... } 未初始化的数组元素值为内存中的实际值,此值是不确定...

C#访问Java的WebService添加SOAPHeader验证的问题

这两天做与公司OA的接口,发现C#访问Java的WebService需要提供一个SOAP的头验证信息,但是WebService的WSDL中并没有提供约定的验证信息,所以Visual Studio生成的代理类并没有发现这些内容,所以这个SOAPHeader就必须要自己组织,还遇到一个问题就是SOAP头部信息,OA那边还按照不知道什么实例添加了一个根节点没有的...

Java常考面试题

Java常考面试题,整理自牛客网和程序员面试宝典,有的题不太好。 1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 答:Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自...

.NET系统框架

本书是一本讲解.NET技术的书籍,目标读者群也是在.NET框架(.NET Framework)下进行开发的程序员,因此我们无法回避的问题就是:什么是.NET框架?它包含了哪些内容?为开发程序提供了哪些支持?很多朋友对这类个问题的第一反应可能是.NET框架所提供的庞大类库及编写代码所采用的C#语言,实际上远不止这些。 要描述.NET框架,自然会遇到与其相关的...

转载->C#异常处理

C#异常处理 异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。 异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:try、catch、finally和throw。 try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 cat...