spring开发_BeanFactoryPostProcessor_容器后处理器

项目结构:

http://www.cnblogs.com/hongten/gallery/image/112611.html

/spring_1700_容器后处理器/src/com/b510/app/test/SpringTest.java

 1 package com.b510.app.test;
2
3 import org.springframework.context.ApplicationContext;
4 import org.springframework.context.support.ClassPathXmlApplicationContext;
5
6 import com.b510.service.AnimalService;
7
8 /**
9 * 测试类
10 *
11 * @author Hongten
12 *
13 */
14 public class SpringTest {
15 public static void main(String[] args) {
16 ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
17 // 获取id为animaleServiceOfDog的Bean
18 AnimalService animalServiceOfDog = (AnimalService) act
19 .getBean("animaleServiceOfDog");
20 animalServiceOfDog.getInfo();
21 // 获取id为animaleServiceOfCat的Bean
22 AnimalService animalServiceOfCat = (AnimalService) act
23 .getBean("animaleServiceOfCat");
24 animalServiceOfCat.getInfo();
25 }
26 }

/spring_1700_容器后处理器/src/com/b510/app/util/MyBeanFactoryPostProcessor.java

package com.b510.app.util;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;

/**
* 容器后处理类,实现BeanFactoryPostProcessor接口
*
*
@author Hongten
*
*/
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
/**
* 重写该方法,对Spring进行后处理。
*
*
@param beanFactory
* Spring容器本身
*/
public void postProcessBeanFactory(
ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("比较一下上面信息********************");
System.out.println("Spring容器是:" + beanFactory);
System.out.println("比较一下下面信息********************");
}
}

/spring_1700_容器后处理器/src/com/b510/service/AnimalService.java

 1 package com.b510.service;
2
3 /**
4 * 动物抽象类
5 *
6 * @author Hongten
7 *
8 */
9 public interface AnimalService {
10
11 /**
12 * 获取相关信息
13 */
14 public abstract void getInfo();
15
16 }

/spring_1700_容器后处理器/src/com/b510/service/MeatService.java

 1 package com.b510.service;
2
3 /**
4 * 定义抽象类MeatService肉类
5 *
6 * @author Hongten
7 *
8 */
9 public interface MeatService {
10
11 /**
12 * 定义方法whatMeat
13 *
14 * @return 返回一个字符串
15 */
16 public abstract String whatMeat();
17 }

/spring_1700_容器后处理器/src/com/b510/service/impl/CatServiceBean.java

 1 package com.b510.service.impl;
2
3 import com.b510.service.AnimalService;
4 import com.b510.service.MeatService;
5
6 /**
7 * 定义猫类实现AnimaleService抽象类
8 *
9 * @author Hongten
10 *
11 */
12 public class CatServiceBean implements AnimalService {
13 private int age;
14 private MeatService meatService;
15
16 public CatServiceBean(){
17 System.out.println("猫类被初始化了");
18 }
19
20 public int getAge() {
21 return age;
22 }
23
24 @Override
25 public void getInfo() {
26 System.out.println("我是猫,我的年龄是:"+age+",我很喜欢吃"+meatService.whatMeat());
27 }
28 public MeatService getMeatService() {
29 return meatService;
30 }
31
32 public void setAge(int age) {
33 this.age = age;
34 }
35
36 public void setMeatService(MeatService meatService) {
37 this.meatService = meatService;
38 }
39
40
41 }

/spring_1700_容器后处理器/src/com/b510/service/impl/DogServiceBean.java

 1 package com.b510.service.impl;
2
3 import com.b510.service.AnimalService;
4 import com.b510.service.MeatService;
5
6 /**
7 * 定义DogServiceBean类
8 *
9 * @author Hongten
10 *
11 */
12 public class DogServiceBean implements AnimalService {
13 private int age;
14 private MeatService meatService;
15
16 public DogServiceBean() {
17 System.out.println("狗类被初始化了");
18 }
19
20 public int getAge() {
21 return age;
22 }
23
24 @Override
25 public void getInfo() {
26 System.out.println("我是狗,我的年龄是:" + age + ",我很喜欢吃"
27 + meatService.whatMeat());
28 }
29
30 public MeatService getMeatService() {
31 return meatService;
32 }
33
34 public void setAge(int age) {
35 this.age = age;
36 }
37
38 public void setMeatService(MeatService meatService) {
39 this.meatService = meatService;
40 }
41
42 }

/spring_1700_容器后处理器/src/com/b510/service/impl/FishServiceBean.java

 1 package com.b510.service.impl;
2
3 import com.b510.service.MeatService;
4
5 /**
6 * 定义鱼肉实现MeatService抽象类
7 *
8 * @author Hongten
9 *
10 */
11 public class FishServiceBean implements MeatService {
12
13 public FishServiceBean(){
14 System.out.println("鱼肉类被初始化了");
15 }
16 @Override
17 public String whatMeat() {
18 return "鱼肉";
19 }
20
21 }

/spring_1700_容器后处理器/src/com/b510/service/impl/PorkServiceBean.java

 1 package com.b510.service.impl;
2
3 import com.b510.service.MeatService;
4
5 /**
6 * 定义猪肉实现MeatService抽象类
7 *
8 * @author Hongten
9 *
10 */
11 public class PorkServiceBean implements MeatService {
12
13 public PorkServiceBean(){
14 System.out.println("猪肉类被初始化了");
15 }
16 @Override
17 public String whatMeat() {
18 return "猪肉";
19 }
20
21 }

/spring_1700_容器后处理器/src/beans.xml

 1 <?xml version="1.0" encoding="GBK"?>
2 <!-- Spring配置文件的根元素,使用spring-beans-3.0.xsd语义约束 -->
3 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
5 xsi:schemaLocation="http://www.springframework.org/schema/beans
6 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
7
8 <bean id="meatServiceOfFish" class="com.b510.service.impl.FishServiceBean"></bean>
9 <bean id="meatServiceOfPork" class="com.b510.service.impl.PorkServiceBean"></bean>
10 <bean id="animaleServiceOfDog" class="com.b510.service.impl.DogServiceBean"
11 p:age="12" p:meatService-ref="meatServiceOfPork" />
12 <bean id="animaleServiceOfCat" class="com.b510.service.impl.CatServiceBean"
13 p:age="3" p:meatService-ref="meatServiceOfFish" />
14 <!-- 容器后处理器 -->
15 <bean id="appBeanPostProcessor" class="com.b510.app.util.MyBeanFactoryPostProcessor"></bean>
16 </beans>

运行结果:

2012-3-12 20:28:20 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@15eb0a9: display name [org.springframework.context.support.ClassPathXmlApplicationContext@15eb0a9]; startup date [Mon Mar 12 20:28:20 CST 2012]; root of context hierarchy
2012-3-12 20:28:20 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [beans.xml]
2012-3-12 20:28:24 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@15eb0a9]: org.springframework.beans.factory.support.DefaultListableBeanFactory@4a63d8
比较一下上面信息********************
Spring容器是:org.springframework.beans.factory.support.DefaultListableBeanFactory@4a63d8: defining beans [meatServiceOfFish,meatServiceOfPork,animaleServiceOfDog,animaleServiceOfCat,appBeanPostProcessor]; root of factory hierarchy
比较一下下面信息********************
2012-3-12 20:28:24 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@4a63d8: defining beans [meatServiceOfFish,meatServiceOfPork,animaleServiceOfDog,animaleServiceOfCat,appBeanPostProcessor]; root of factory hierarchy
鱼肉类被初始化了
猪肉类被初始化了
狗类被初始化了
猫类被初始化了
我是狗,我的年龄是:12,我很喜欢吃猪肉
我是猫,我的年龄是:3,我很喜欢吃鱼肉

我们可以看见:“比较一下上面信息********************”和“比较一下上面信息********************”
的中间内容和系统输出的信息,连个是相同的。


原文地址:https://www.cnblogs.com/hongten/p/java_spring_BeanFactoryPostProcessor.html