package org.niit.springioc.example3; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; public class BeanPost implements BeanPostProcessor { public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException { // TODO Auto-generated method stub if (arg0 instanceof Cat){ System.out.println("call postProcessBeforeInitialization...in Class Cat"); }else if (arg0 instanceof Girl){ System.out.println("call postProcessBeforeInitialization...in Class Girl"); } return arg0; } public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException { // TODO Auto-generated method stub System.out.println("call postProcessAfterInitialization..."); return arg0; } } package org.niit.springioc.example3; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; public class BeanFactoryPost implements BeanFactoryPostProcessor { public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException { // TODO Auto-generated method stub System.out.println("现在共有:"+arg0.getBeanDefinitionCount()+"个bean对象被spring构造"); } } 配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <!-- 本实例演示: 集合的注入 --> <bean class="org.niit.springioc.example3.Girl" name="girl" scope="singleton" init-method="initilize" destroy-method="destroy"> <property name="name" value="玛丽"></property> <property name="catList"> <list> <ref bean="cat1"/> <ref bean="cat2"/> </list> </property> <property name="catSet"> <set> <ref bean="cat1"/> <ref bean="cat2"/> </set> </property> <property name="catMap"> <map> <entry key="cat1" value-ref="cat1"></entry> <entry key="cat2" value-ref="cat2"></entry> </map> </property> </bean> <bean class="org.niit.springioc.example3.Cat" name="cat1"> <property name="id" value="smalltiger1"></property> <property name="color" value="white"></property> </bean> <bean class="org.niit.springioc.example3.Cat" name="cat2"> <constructor-arg index="0" value="smalltigger2"></constructor-arg> <constructor-arg index="1" value="black"></constructor-arg> </bean> <bean class="org.niit.springioc.example3.BeanFactoryPost"></bean> <bean class="org.niit.springioc.example3.BeanPost"></bean> </beans> 测试代码: package org.niit.springioc.example3; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; public class Client1 { private static BeanFactory bf = null; private static ApplicationContext appCxt = null; private static ApplicationContext getAppCxt() { if (appCxt==null){ /*实例化ApplicationContext接口对象的多种方式*/ //appCxt = new FileSystemXmlApplicationContext("c://applicationContext.xml"); appCxt=new ClassPathXmlApplicationContext("org/niit/springioc/example3/applicationContext.xml");; } return appCxt; } private static BeanFactory getBeanFactory() { if (bf==null){ Resource res = new ClassPathResource("org/niit/springioc/example3/applicationContext.xml"); bf = new XmlBeanFactory(res); } return bf; } /** * @param args */ // public static void main(String[] args) { // // TODO Auto-generated method stub // Client1 c =new Client1(); // appCxt = c.getAppCxt(); // Girl girl = (Girl)appCxt.getBean("girl"); // // //测试Set System.out.println(girl.getName()+"有"+girl.getCatSet().size()+"只猫"); for (Cat cat : girl.getCatSet()) { cat.action(); } // // //测试Map // System.out.println(girl.getName()+"有"+girl.getCatMap().size()+"只猫"); // for (String key : girl.getCatMap().keySet()) { // girl.getCatMap().get(key).action(); // } // //((AbstractApplicationContext)appCxt).close();//一般只有Servlet容器或者EJB容器才会执行该方法 // } public static void main(String[] args) { //scope="singleton"表示容器始终提供同一个bean对象,多次getBean返回的是同一个Bean Client1 c = new Client1(); Girl g1 = (Girl)c.getAppCxt().getBean("girl"); Girl g2 = (Girl)c.getAppCxt().getBean("girl"); } }