package spring.ioc;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class Person implements BeanFactoryAware, BeanNameAware, InitializingBean, DisposableBean {
private String name;
private String mobile;
public Person() {
super();
System.out.println("[构造器] 调用Person的构造器实例化");
}
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("[属性注入] name="+name);
this.name = name;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
System.out.println("[属性注入] mobile="+mobile);
this.mobile = mobile;
}
@Override
public void destroy() throws Exception {
System.out.println("[接口DisposableBean.destroy() ]");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("[接口InitializingBean.afterPropertiesSet() ]");
}
@Override
public void setBeanName(String name) {
System.out.println("[接口BeanNameAware.setBeanName() ]");
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println("[接口BeanFactoryAware.setBeanFactory() ]");
}
public void myInit(){
System.out.println("[init-method]调用<bean>的init-method属性指定的初始化方法");
}
public void myDestory() {
System.out.println("[destroy-method]调用<bean>的destroy-method属性指定的销毁方法");
}
}
package spring.ioc;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
/**
*
* @ClassName:MyBeanFactoryPostProcessor
* @Description:自定义工厂后处理器
* @author diandian.zhang
* @date 2017年10月25日下午7:14:09
*/
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
public MyBeanFactoryPostProcessor() {
super();
System.out.println("[MyBeanFactoryPostProcessor工厂后处理器]BeanFactoryPostProcessor实现类构造器!!");
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0)
throws BeansException {
System.out.println("[MyBeanFactoryPostProcessor工厂后处理器]BeanFactoryPostProcessor.postProcessBeanFactory()获取bean定义后添加属性mobile=110");
BeanDefinition bd = arg0.getBeanDefinition("person");
bd.getPropertyValues().addPropertyValue("mobile", "110");
}
}
package spring.ioc;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
*
* @ClassName:MyBeanPostProcessor
* @Description:自定义Bean后处理器
* @author diandian.zhang
* @date 2017年10月25日下午7:03:53
*/
public class MyBeanPostProcessor implements BeanPostProcessor {
public MyBeanPostProcessor() {
super();
System.out.println("这是BeanPostProcessor实现类构造器!!");
}
/**
*
* @Description 初始化前,处理器
* @param bean
* @param beanName
* @return
* @throws BeansException
* @author diandian.zhang
* @date 2017年10月25日下午7:07:02
* @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization(java.lang.Object, java.lang.String)
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("BeanPostProcessor接口方法postProcessBeforeInitialization对属性进行更改!beanName="+beanName);
return bean;
}
/**
*
* @Description 初始化后,处理器
* @param bean
* @param beanName
* @return
* @throws BeansException
* @author diandian.zhang
* @date 2017年10月25日下午7:07:07
* @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization(java.lang.Object, java.lang.String)
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("BeanPostProcessor接口方法postProcessAfterInitialization对属性进行更改!beanName="+beanName);
return bean;//注意,如果返回null,后续BeanPostProcessor不会再执行
}
}
package spring.ioc;
import java.beans.PropertyDescriptor;
import org.springframework.beans.BeansException;
import org.springframework.beans.PropertyValues;
import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter;
/**
*
* @ClassName:MyInstantiationAwareBeanPostProcessor
* @Description:BeanPostProcessor的子类,增加了更多自定方法
* @author diandian.zhang
* @date 2017年10月25日下午7:09:15
*/
public class MyInstantiationAwareBeanPostProcessor extends
InstantiationAwareBeanPostProcessorAdapter {
public MyInstantiationAwareBeanPostProcessor() {
super();
System.out.println("这是InstantiationAwareBeanPostProcessorAdapter实现类构造器!!");
}
// 接口方法、实例化Bean之前调用
@Override
public Object postProcessBeforeInstantiation(Class<?> beanClass,String beanName) throws BeansException {
System.out.println("InstantiationAwareBeanPostProcessor调用postProcessBeforeInstantiation方法[实例化Bean之前调用 ]beanname="+beanName);
return null;
}
// 接口方法、实例化Bean之后调用
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out .println("InstantiationAwareBeanPostProcessor调用postProcessAfterInitialization方法[实例化Bean之后调用]beanname="+beanName);
return bean;
}
// 接口方法、设置某个属性时调用
@Override
public PropertyValues postProcessPropertyValues(PropertyValues pvs,
PropertyDescriptor[] pds, Object bean, String beanName)
throws BeansException {
System.out.println("InstantiationAwareBeanPostProcessor调用postProcessPropertyValues方法 pvs="+pvs+",beanName="+beanName);
return pvs;
}
}
package spring.ioc;
import org.junit.Test; 6 import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;10
import spring.aop.xml.dao.Dao;
/**
*
* @ClassName:IOCTest
* @Description:测试类
* @author diandian.zhang
* @date 2017年10月25日下午4:42:01
*/
public class IOCTest {
@Test
public void iocPersonTest(){
System.out.println("=============容器初始化======start=========");
@SuppressWarnings("resource")
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("simple_spring_bean.xml");//源码入口
System.out.println("=============容器初始化=======end========");
System.out.println("=============获取person bean====start=======");
Person person = applicationContext.getBean("person",Person.class);//获取Bean
System.out.println("=============获取person bean====end=======,person类名="+person.getClass().getName());
System.out.println("=============注册关闭钩子,关闭容器(JVM shutdown)时触发钩子!================");
((ClassPathXmlApplicationContext)applicationContext).registerShutdownHook();
}
}
=============容器初始化======start========= log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment). log4j:WARN Please initialize the log4j system properly. [MyBeanFactoryPostProcessor工厂后处理器]BeanFactoryPostProcessor实现类构造器!! [MyBeanFactoryPostProcessor工厂后处理器]BeanFactoryPostProcessor.postProcessBeanFactory()获取bean定义后添加属性mobile=110 这是BeanPostProcessor实现类构造器!! 这是InstantiationAwareBeanPostProcessorAdapter实现类构造器!! InstantiationAwareBeanPostProcessor调用postProcessBeforeInstantiation方法[实例化Bean之前调用 ]beanname=person [构造器] 调用Person的构造器实例化 InstantiationAwareBeanPostProcessor调用postProcessPropertyValues方法 pvs=PropertyValues: length=2; bean property 'mobile'; bean property 'name',beanName=person [属性注入] mobile=110 [属性注入] name=张三 [接口BeanNameAware.setBeanName() ] [接口BeanFactoryAware.setBeanFactory() ] BeanPostProcessor接口方法postProcessBeforeInitialization对属性进行更改!beanName=person [接口InitializingBean.afterPropertiesSet() ] [init-method]调用<bean>的init-method属性指定的初始化方法 BeanPostProcessor接口方法postProcessAfterInitialization对属性进行更改!beanName=person InstantiationAwareBeanPostProcessor调用postProcessAfterInitialization方法[实例化Bean之后调用]beanname=person =============容器初始化=======end======== =============获取person bean====start======= =============获取person bean====end=======,person类名=spring.ioc.Person =============注册关闭钩子,关闭容器(JVM shutdown)时触发钩子!================ [接口DisposableBean.destroy() ] [destroy-method]调用<bean>的destroy-method属性指定的销毁方法
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有