轉載自:https://blog.csdn.net/u014292162/article/details/52277756java
將對象的依賴交給配置文件來配置(配置文件的名字是能夠任意的,不過通常寫一個比較規範的名字),這裏使用IOC特性對類中的屬性進行初始化spring
使用junit來進行測試單元測試(注意:單元測試一些老的版本可能會存在bug,如calssNotFound...,建議下載新的junit版本)ide
User.java 用戶bean類單元測試
1 package com.xxx.spring.ioc.bean; 2 3 import java.io.Serializable; 4 5 public class User implements Serializable { 6 private static final long serialVersionUID = 1L; 7 private int id; //用戶編號 8 private String name; //用戶名 9 private int age; //用戶年齡 10 private String gender; //用戶性別 11 public User() {} 12 public User(int id, String name, int age, String gender) { 13 super(); 14 this.id = id; 15 this.name = name; 16 this.age = age; 17 this.gender = gender; 18 } 19 public int getId() { 20 return id; 21 } 22 public void setId(int id) { 23 this.id = id; 24 } 25 public String getName() { 26 return name; 27 } 28 public void setName(String name) { 29 this.name = name; 30 } 31 public int getAge() { 32 return age; 33 } 34 public void setAge(int age) { 35 this.age = age; 36 } 37 public String getGender() { 38 return gender; 39 } 40 public void setGender(String gender) { 41 this.gender = gender; 42 } 43 @Override 44 public String toString() { 45 return "User [id=" + id + ", name=" + name + ", age=" + age 46 + ", gender=" + gender + "]"; 47 } 48 49 }
spring中bean的配置:測試
這裏說的Spring中的Bean概念,跟咱們寫JavaBean類不是一個概念,Spring中全部配置在xml中或使用spring來初始化的都叫Bean(dao,service,javaBean,Controller...)this
IOC控制反轉,控制權的轉移,應用程序自己不負責依賴對象的建立和維護,而是有外部容器的建立和維護spa
什麼被反轉了呢——————》獲的對象的過程被反轉了,依賴注入.net
set.xml配置文件初始化User.java中的相關屬性,可使用junit對其進行單元測試prototype
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> 6 <!-- name中的user能夠取別名 scope="prototype" 或singleton="false"能夠設置爲非單例模式 --> 7 <bean name="user,user2" class="com.xxx.spring.ioc.bean.User"> 8 <property name="id" value="1"/> 9 <property name="name" value="tom"/> 10 <property name="age" value="20"/> 11 <property name="gender" value="male"/> 12 </bean> 13 14 </beans>
測試:code
1 @Test 2 public void test2() { 3 BeanFactory factory = new ClassPathXmlApplicationContext("com/xxx/spring/chap1/set.xml"); 4 //User user = (User) factory.getBean("user"); 5 //User user = (User) factory.getBean("user",User.class); 6 //User user = (User) factory.getBean(User.class); //只有惟一的bean的時候才使用這種方式 7 //System.out.println(user); 8 System.out.println(factory.getType("user")); //獲取user實例的類型 9 User user = (User) factory.getBean("user"); 10 User user2 = (User) factory.getBean("user"); 11 System.out.println(user == user2);//true -- 單例 --這是能夠控制的在配置文件中 bean scope="prototype"-->會變成原型模式 這時結果會是false 12 System.out.println(factory.isPrototype("user"));//是否爲原型 false 13 System.out.println(factory.isSingleton("user"));//是否爲單例 true 14 15 System.out.println(factory.isTypeMatch("user", User.class));//判斷 user實例是否爲這種類型 true 16 17 String[] str = factory.getAliases("user"); //獲取別名 18 for(int i=0;i<str.length;i++){ 19 System.out.println(str[i]);//user2 20 } 21 }
使用junit測試時候,註解@BeforeClass的會先於@Test註解的方法運行,junit相關的jar最好使用4.4以上的版本
上邊的案例factory.getBean("user",User.class);第一參數是set.xml文件中對應bean的name值或id值.
System.out.println(user == user2);//true