spring提供两种容器
下面是代码
public interface Star { public void singASong () ; } public class SuperStar implements Star{ private String name; public void setName(String name) { this.name = name; } public void init(){ System.out.println("SuperStar init"); } public void singASong () { System.out.println(name + "巨星在唱歌"); } } public interface Perform { public void perform (); public void performlist (); public void performmap(); } public class PerformShow implements Perform{ private Star star; private String cost; private List<Star> starList; private Map<String,Star> starMap; //for constructor-arg public PerformShow() { } public PerformShow(Star star,String cost) { this.star = star; this.cost = cost; } private static class singleTon{ static Perform instance = new PerformShow(); } //for setter property public void setStar(Star star) { this.star = star; } public void setCost(String cost) { this.cost = cost; } //for setter list public void setStarList(List<Star> starList) { this.starList = starList; } //for setter map public void setStarMap(Map<String, Star> starMap) { this.starMap = starMap; } //singlton public static Perform getInstance (){ return singleTon.instance; } //init destroy public void init(){ System.out.println("PerformShow INIT"); } public void destroy(){ System.out.println("PerformShow destroy"); } //funtion public void perform(){ System.out.println(cost); star.singASong(); } public void performlist(){ System.out.println(cost); for(Star star:starList){ star.singASong(); } } public void performmap(){ System.out.println(cost); for(Map.Entry<String,Star> mapEntry:starMap.entrySet()){ mapEntry.getValue().singASong(); } } }
xml为
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-init-method="init"> <bean id="performconstructor" class="spring.in.action.bean.beanInjectionInitDestroy.PerformShow"> <!--构造器注入,简单值用value,对象用再声明一个bean,ref--> <constructor-arg ref="star"/> <constructor-arg value="constructor花了好几百万"/> </bean> <bean id="performsetter" class="spring.in.action.bean.beanInjectionInitDestroy.PerformShow"> <!--构造器注入,简单值用value,对象用再声明一个bean,ref--> <property name="star" ref="star"/> <property name="cost" value="setter花了好几百万"/> </bean> <bean id="performlist" class="spring.in.action.bean.beanInjectionInitDestroy.PerformShow"> <!--构造器注入,简单值用value,对象用再声明一个bean,ref--> <property name="starList"> <list> <ref bean="star1"/> <ref bean="star2"/> <ref bean="star3"/> <ref bean="star4"/> </list> </property> <property name="cost" value="setter list花了好几百万"/> </bean> <bean id="performap" class="spring.in.action.bean.beanInjectionInitDestroy.PerformShow"> <!--构造器注入,简单值用value,对象用再声明一个bean,ref--> <property name="starMap"> <map> <entry key="巨星1" value-ref="star1"/> <entry key="巨星2" value-ref="star2"/> <entry key="巨星3" value-ref="star3"/> <entry key="巨星4" value-ref="star4"/> </map> </property> <property name="cost" value="setter map花了好几百万"/> </bean> <!--工厂singleton--> <!--<bean id="performSingle" class="spring.in.action.bean.beanInjectionInitDestroy.PerformShow"--> <!--factory-method="getInstance">--> <!--</bean>--> <bean id="star" class="spring.in.action.bean.beanInjectionInitDestroy.SuperStar"> <property name="name" value="刘德华"/> </bean> <bean id="star1" class="spring.in.action.bean.beanInjectionInitDestroy.SuperStar"> <property name="name" value="刘德华"/> </bean> <bean id="star2" class="spring.in.action.bean.beanInjectionInitDestroy.SuperStar"> <property name="name" value="黎明"/> </bean> <bean id="star3" class="spring.in.action.bean.beanInjectionInitDestroy.SuperStar"> <property name="name" value="张学友"/> </bean> <bean id="star4" class="spring.in.action.bean.beanInjectionInitDestroy.SuperStar"> <property name="name" value="郭富城"/> </bean> </beans>
测试类为
public class TestBeanInjectionInitDestroy { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring-injection-init-destroy.xml"); Perform performconstructor = (Perform)context.getBean("performconstructor"); System.out.println("constructor start=====>>>>>>>>>> " + performconstructor.hashCode()); performconstructor.perform(); Perform performsetter = (Perform)context.getBean("performsetter"); System.out.println("setter start=====>>>>>>>>>> " + performsetter.hashCode()); performsetter.perform(); Perform performlist = (Perform)context.getBean("performlist"); System.out.println("setter list start=====>>>>>>>>>> " + performlist.hashCode()); performlist.performlist(); Perform performmap = (Perform)context.getBean("performap"); System.out.println("setter map start=====>>>>>>>>>> " + performmap.hashCode()); performmap.performmap(); // Perform performSingle = (Perform)context.getBean("performSingle"); // System.out.println(performSingle.hashCode()); } }
结果为
SuperStar init PerformShow INIT PerformShow INIT SuperStar init SuperStar init SuperStar init SuperStar init PerformShow INIT PerformShow INIT constructor start=====>>>>>>>>>> 846857501 constructor花了好几百万 刘德华巨星在唱歌 setter start=====>>>>>>>>>> 1759890638 setter花了好几百万 刘德华巨星在唱歌 setter list start=====>>>>>>>>>> 1189682735 setter list花了好几百万 刘德华巨星在唱歌 黎明巨星在唱歌 张学友巨星在唱歌 郭富城巨星在唱歌 setter map start=====>>>>>>>>>> 1924973575 setter map花了好几百万 刘德华巨星在唱歌 黎明巨星在唱歌 张学友巨星在唱歌 郭富城巨星在唱歌
原文:http://www.cnblogs.com/damiao-hungry/p/4987218.html