本文共 7393 字,大约阅读时间需要 24 分钟。
文件目录:
代码:配置文件:applicationContext.xml
Test.java
package com.neuedu.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); Object bean = ac.getBean("car"); Object bean2 = ac.getBean("car"); System.out.println(bean == bean2); } }
Car.java
package com.neudeu.po;public class Car { private String brand; private double price; public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Car [brand=" + brand + ", price=" + price + "]"; } }
输出:
<bean id="car" class="com.neudeu.po.Car"></bean> 只配置一个 car,
Object bean = ac.getBean("car");Object bean2 = ac.getBean("car"); 无论获取几次但都是同一个对象
System.out.println(bean == bean2);故输出为 ture代码:配置文件:applicationContext.xml
Test.java
package com.neuedu.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); Object bean = ac.getBean("car"); Object bean2 = ac.getBean("car"); System.out.println(bean == bean2); } }
car.java
package com.neudeu.po;public class Car { private String brand; private double price; public Car() { System.out.println("Car构造方法"); } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Car [brand=" + brand + ", price=" + price + "]"; } }
输出:
修改为 singleton输出:
文件目录:
代码:配置文件:applicationContext.xml
Test.java
package com.neuedu.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); } }
idCard.java
package com.neudeu.po;public class idCard { public idCard() { System.out.println("IdCard..."); } private String CardNo; public String getCardNo() { return CardNo; } public void setCardNo(String cardNo) { CardNo = cardNo; }}
Person.java
package com.neudeu.po;import com.neudeu.po.idCard;import java.util.List;public class Person { private idCard idCard; private String name; private int age; private Listcars; public List getCars() { return cars; } public void setCars(List cars) { this.cars = cars; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]"; } 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 idCard getIdCard() { return idCard; } public Person(){ System.out.println("Person..."); } public void setIdCard(idCard idCard) { System.out.println("setIdCard..."); this.idCard = idCard; } }
输出:
<bean id ="person" class="com.neudeu.po.Person" autowire="byType" >
autowire="byType" :自动注入(按类型),自动的从 Spring 中找有没有 Person 里需要的 idCard 类型的对象,有点化就自动的将其注入到 Person 的属性里面去
代码:配置文件:applicationContext.xml
输出:autowire="byName" :自动注入(按名字装配)
代码:配置文件:applicationContext.xml
输出:与前文相比,Person 都没有执行(延迟加载)
修改代码:Test.java
package com.neuedu.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); Object bean = ac.getBean("person"); //加入代码 System.out.println(bean); //加入代码 } }
输出:只有执行 Object bean = ac.getBean("person"); 后才会执行后续代码
在容器对这个bean初始化时执行该方法
代码:配置文件:applicationContext.xml
//修改代码
Person.java
package com.neudeu.po;import com.neudeu.po.idCard;import java.util.List;public class Person { private idCard idCard; private String name; private int age; private Listcars; public List getCars() { return cars; } public void setCars(List cars) { this.cars = cars; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]"; } 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 idCard getIdCard() { return idCard; } public Person(){ System.out.println("Person..."); } public void setIdCard(idCard idCard) { System.out.println("setIdCard..."); this.idCard = idCard; } public void init() { System.out.println("init..."); //修改代码 } }
输出:bean初始化时执行 init 方法,输出 init...
容器关闭时执行该方法
代码:配置文件:applicationContext.xml
Person.java
package com.neudeu.po;import com.neudeu.po.idCard;import java.util.List;public class Person { private idCard idCard; private String name; private int age; private Listcars; public List getCars() { return cars; } public void setCars(List cars) { this.cars = cars; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]"; } 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 idCard getIdCard() { return idCard; } public Person(){ System.out.println("Person..."); } public void setIdCard(idCard idCard) { System.out.println("setIdCard..."); this.idCard = idCard; } public void init() { System.out.println("init..."); } public void destroy(){ System.out.println("destroy..."); //修改代码 } }
输出:并没有输出 destory... 要在关闭容器时才会执行
修改代码:Test.java
package com.neuedu.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test { public static void main(String[] args) { ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //修改代码 Object bean = ac.getBean("person"); System.out.println(bean); ac.close(); } }
输出:执行关闭容器,输出 destory...