做网站都需要什么人团,wordpress post_date,徐州网站定制公司,易优系统助手插件在使用 Spring 框架后#xff0c;对象以 Bean 的形式统一交给 IOC 容器去创建和管理。现阶段主流的方式是基于 SpringBoot 框架#xff0c;基于注解的方式实现 Bean 的创建#xff0c;但在原生 Spring 框架中其实存在三种创建 Bean 的方式。
一、基础类
BeanProcess 实体类…在使用 Spring 框架后对象以 Bean 的形式统一交给 IOC 容器去创建和管理。现阶段主流的方式是基于 SpringBoot 框架基于注解的方式实现 Bean 的创建但在原生 Spring 框架中其实存在三种创建 Bean 的方式。
一、基础类
BeanProcess 实体类虽然加了 Component 等三个注解但只在注解方式创建 Bean 时用到了。
package com.nineya.spring.entity;import lombok.Getter;
import lombok.Setter;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;Getter
Setter
Component(test)
public class BeanProcess {private String name;PostConstructpublic void init() {System.out.println(Bean InitMethodName);}PreDestroypublic void destroy() {System.out.println(Bean DestroyMethodName);}}后置处理器类
BeanPostProcessor 后置处理器。
package com.nineya.spring.processor;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;Component
public class NineyaBeanPostProcessor implements BeanPostProcessor {Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println(BeanPostProcessor.postProcessAfterInitialization( beanName ) 后置处理器);return bean;}Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println(BeanPostProcessor.postProcessBeforeInitialization( beanName ) 后置处理器);return bean;}
}BeanFactoryPostProcessor 后置处理器。
package com.nineya.spring.processor;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;Component
public class NineyaBeanFactoryPostProcessor implements BeanFactoryPostProcessor {Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {System.out.println(BeanFactoryPostProcessor.postProcessBeanFactory 后置处理器);}
}二、三种创建方式
2.1 JavaApi 方式
JavaApi 方式没有注册 BeanFactoryPostProcessor 后置处理器的接口应该在注册添加完所有 BeanDefinition 后手动调用执行 BeanFactoryPostProcessor 后置处理器方法。
private static void javaApi() {// 创建bean工厂DefaultListableBeanFactory context new DefaultListableBeanFactory();//构造bean定义GenericBeanDefinition gbd new GenericBeanDefinition();gbd.setBeanClass(BeanProcess.class);// 设置属性ListPropertyValue propertyValues new ArrayList();propertyValues.add(new PropertyValue(name, test));gbd.setPropertyValues(new MutablePropertyValues(propertyValues));// 设置生命周期方法gbd.setInitMethodName(init);gbd.setDestroyMethodName(destroy);//注册到环境上下文context.registerBeanDefinition(test, gbd);context.addBeanPostProcessor(new NineyaBeanPostProcessor());new NineyaBeanFactoryPostProcessor().postProcessBeanFactory(context);// 通过class取得beanBeanProcess beanProcess context.getBean(BeanProcess.class);System.out.println(beanProcess : beanProcess.hashCode());
}2.2 xml方式
创建 bean 的 xml 文件。
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdbean classcom.nineya.spring.entity.BeanProcess nametest init-methodinit destroy-methoddestroyproperty namename valuetest //bean!-- 注册处理器 --bean classcom.nineya.spring.processor.NineyaBeanPostProcessor/bean classcom.nineya.spring.processor.NineyaBeanFactoryPostProcessor/
/beans读取 xml 文件创建 bean 工厂。
private static void xmlFile() {ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext(spring.xml);// 通过class取得beanBeanProcess beanProcess context.getBean(BeanProcess.class);System.out.println(beanProcess : beanProcess.hashCode());
}2.3 注解方式
private static void annotation() {AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext();// 配置注解扫描路径context.scan(BeanLifecycleMain.class.getPackage().getName());context.refresh();// 通过class取得beanBeanProcess beanProcess context.getBean(BeanProcess.class);System.out.println(beanProcess : beanProcess.hashCode());
}