示例代码:https://download.csdn.net/download/u010476739/11419455
sping入门参照:https://blog.csdn.net/u010476739/article/details/76696393
试验条件:
maven
spring framwork 4.2.4.RELEASE
试验目的:
试验bean的构建方法:空参构建、带参构造函数构建、单例模式
<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"> <!-- 根据类的空参构造函数构建简单的bean实例,默认是单例的(在这个容器中) --> <bean name="dogSimple" class="bean.Dog"></bean> <!-- 根据类的带参构造函数构建简单的bean实例,参数为简单类型 --> <bean name="dogConstructor" class="bean.Dog"> <constructor-arg value="lucy" /> </bean> <!-- 根据类的带参构造函数构建简单的bean实例,参数为集合类型 --> <bean name="dogConstructorList" class="bean.Dog"> <constructor-arg> <list> <value>lucy</value> <value>tom</value> </list> </constructor-arg> </bean> <!-- 根据根据类的带参构造函数构建简单的bean实例,参数为引用类型 --> <bean id="actorConstructorRef" class="bean.Actor"> <constructor-arg ref="dogConstructorList"></constructor-arg> </bean> <!-- 根据类的静态方法构建bean实例 --> <bean id="stage" class="bean.Stage" factory-method="getInstance"> </bean> <!-- 根据类的空参构造函数构建简单的bean实例,每次获取bean的时候都会重新构建一个新的实例 --> <bean id="personPrototype" class="bean.Person" scope="prototype"> </bean> <!-- 这个bean是为下面的String像Date转换做准备的 --> <bean id="dateFormat" class="java.text.SimpleDateFormat"> <constructor-arg value="yyyy-MM-dd" /> </bean> <!-- 根据类的空参构造函数构建简单的bean实例,并且初始化属性设置 --> <bean id="personProperty" class="bean.Person"> <property name="name" value="晓明" /> <property name="age" value="20" /> <property name="birthday"> <bean factory-bean="dateFormat" factory-method="parse"> <constructor-arg value="1995-02-03" /> </bean> </property> <property name="scores"> <list> <value>98</value> <value>65</value> <value>83</value> </list> </property> </bean> </beans>
Dog.java
package bean; import java.util.List; public class Dog { public Dog(){ } public String show(){ if(name!=null&&name!=""){ return "i'm a dog named "+name; } if(names!=null){ String res="i'm a dog named "; for(int i=0;i<names.size();i++){ res+=names.get(i)+","; } return res; } return "i'm a dog"; } private String name; public Dog(String name){ this.name=name; } private List<String> names; public Dog(List<String> names){ this.names=names; } }Person.java
package bean; import java.util.Date; import java.util.List; public class Person { private String name; private int age; private Date birthday; private List<Double> scores; public List<Double> getScores() { return scores; } public void setScores(List<Double> scores) { this.scores = scores; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { String base = "{name:" + this.name + ",age:" + this.age + ",birthday:" + this.birthday + "}"; base += "\r\n"; for (Double score : scores) { base += score + "\r\n"; } return base; } }Actor.java
package bean; public class Actor { public Dog dog; public Actor(Dog dog) { this.dog = dog; } }
App.java
package springxmldemo; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import bean.Actor; import bean.Dog; import bean.Person; import bean.Stage; public class App { public static void main(String[] args) { //启动spring容器 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //1. 根据类的空参构造函数构建简单的bean实例,默认是单例的(在这个容器中) Dog dogSimple=(Dog) context.getBean("dogSimple"); //i'm a dog System.out.println(dogSimple.show()); Dog dogSimple2=(Dog) context.getBean("dogSimple"); //true System.out.println(dogSimple2==dogSimple); //2.根据类的带参构造函数构建简单的bean实例,参数为简单类型 Dog dogConstructor=(Dog) context.getBean("dogConstructor"); //i'm a dog named lucy System.out.println(dogConstructor.show()); //3.根据类的带参构造函数构建简单的bean实例,参数为集合类型 Dog dogConstructorList=(Dog) context.getBean("dogConstructorList"); //i'm a dog named lucy,tom, System.out.println(dogConstructorList.show()); //4. 根据根据类的带参构造函数构建简单的bean实例,参数为引用类型 Actor actorConstructorRef=(Actor) context.getBean("actorConstructorRef"); //i'm a dog named lucy,tom, System.out.println(actorConstructorRef.dog.show()); //5.根据类的静态方法构建bean实例,这里用工厂方法模拟了程序内单例的实现 Stage stage=(Stage) context.getBean("stage"); //i'm stage System.out.println(stage.show()); Stage stage2=(Stage) context.getBean("stage"); //true System.out.println(stage==stage2); //6.根据类的空参构造函数构建简单的bean实例,在这个spring容器内是非单例的,每次获取bean的时候都会重新构建一个新的实例 Person personPrototype = (Person) context.getBean("personPrototype"); Person personPrototype2 = (Person) context.getBean("personPrototype"); //false System.out.println(personPrototype==personPrototype2); //7.根据类的空参构造函数构建简单的bean实例,并且初始化属性设置 Person personProperty = (Person) context.getBean("personProperty"); //false System.out.println(personProperty); } }