有机蔬菜网站是如何建设,苏宁易购电商网站建设需求分析,seo是怎么优化的,武大网站建设我们在项目中经常会遇到启动时做一些逻辑的处理#xff0c;比如配置信息的预加载#xff0c;缓存信息的预加载等等#xff0c;那都有哪些方法了#xff0c;我们一起来探讨一下#xff1a;
1. 方式
1. 构造方法初始化#xff1a; 使用构造方法进行对象的基本属性初始化。…我们在项目中经常会遇到启动时做一些逻辑的处理比如配置信息的预加载缓存信息的预加载等等那都有哪些方法了我们一起来探讨一下
1. 方式
1. 构造方法初始化 使用构造方法进行对象的基本属性初始化。这是最基本的初始化方式。
public class MyBean {private String name;private int age;public MyBean(String name, int age) {this.name name;this.age age;}
}2.JDK PostConstruct注解 使用PostConstruct注解标记一个方法该方法会在Bean创建后自动调用。
import javax.annotation.PostConstruct;public class MyBean {private String name;PostConstructpublic void init() {// 初始化操作}
}3. Spring 的InitializingBean接口 实现InitializingBean接口重写afterPropertiesSet()方法该方法会在Bean创建后自动调用。
import org.springframework.beans.factory.InitializingBean;public class MyBean implements InitializingBean {Overridepublic void afterPropertiesSet() {// 初始化操作}
}4.Spring 的Bean初始化方法 如果你使用Java配置类定义Bean可以在Bean注解中指定初始化方法
Configuration
public class MyConfig {Bean(initMethod customInitMethod)public MyBean myBean() {return new MyBean();}
}class MyBean{private void init(){//初始化操作}}5.Spring 提供的BeanPostProcessor
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;public class CustomBeanPostProcessor implements BeanPostProcessor {Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {// 在Bean的初始化前执行自定义操作if (bean instanceof MyBean) {((MyBean) bean).setCustomProperty(Custom initialization);}return bean;}Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {// 在Bean的初始化后执行自定义操作return bean;}
}执行顺序
首先创建一个Spring Boot应用程序。
1.创建Spring Boot应用程序的主类 MySpringBootApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication
public class MySpringBootApplication {public static void main(String[] args) {SpringApplication.run(MySpringBootApplication.class, args);}
}2. 创建一个Bean类 MyBean.java
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;Component
public class MyBean implements InitializingBean {public MyBean() {System.out.println(Constructor: Bean is being created.);}PostConstructpublic void postConstructInit() {System.out.println(PostConstruct: Custom initialization after construction.);}Overridepublic void afterPropertiesSet() {System.out.println(InitializingBean: Custom initialization after property set.);}public void customInitMethod() {System.out.println(init-method: Custom initialization method defined in Spring Boot.);}
}3.创建一个自定义的BeanPostProcessor类 CustomBeanPostProcessor.java
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;Component
public class CustomBeanPostProcessor implements BeanPostProcessor {Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println(BeanPostProcessor - BeforeInitialization: beanName);return bean;}Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println(BeanPostProcessor - AfterInitialization: beanName);return bean;}
}运行Spring Boot应用程序后您将看到初始化过程中的打印输出。在控制台上您将看到它们的执行顺序如下 Constructor: Bean is being created. PostConstruct: Custom initialization after construction. InitializingBean: Custom initialization after property set. BeanPostProcessor - BeforeInitialization: myBean init-method: Custom initialization method defined in Spring Boot. BeanPostProcessor - AfterInitialization: myBean 这显示了它们的典型执行顺序即构造方法 PostConstruct InitializingBean init-method BeanPostProcessor在初始化之前和之后执行。这些初始化方法可以根据需求组合使用以自定义Bean的初始化过程。
3.比较
以下是一个使用Markdown表格形式来比较PostConstruct、InitializingBean、自定义初始化方法Bean初始化方法、以及BeanPostProcessor的特点和执行顺序
特点/方法PostConstructInitializingBean自定义初始化方法Bean初始化方法BeanPostProcessor需要导入的包import javax.annotation.PostConstruct;import org.springframework.beans.factory.InitializingBean;无需导入特定包import org.springframework.beans.BeansException;执行顺序在Bean的构造后执行在Bean的构造后执行在Bean的构造后执行在Bean的初始化前和后执行适用对象所有Spring Bean所有Spring Bean所有Spring Bean针对特定Bean或所有Bean执行时机Bean创建后属性设置之后Bean创建后属性设置之后Bean创建后属性设置之后Bean创建后初始化前和后用途自定义初始化操作自定义初始化操作自定义初始化操作自定义初始化和后处理操作配置方式使用PostConstruct注解实现InitializingBean接口在Spring配置中使用init-method属性注册为Bean并由Spring容器自动应用主要优点简便易用无需额外接口实现简便易用无需额外接口实现可用于不使用注解的情况较灵活强大的自定义初始化和后处理功能主要适用场景通常用于自定义初始化逻辑通常用于自定义初始化逻辑在XML配置中使用时比较有用需要高度自定义的初始化和后处理操作