spring IOC註解與xml配置

轉載自:https://blog.csdn.net/u014292162/article/details/52277756java

IOC

   1小案例

    將對象的依賴交給配置文件來配置(配置文件的名字是能夠任意的,不過通常寫一個比較規範的名字),這裏使用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 
相關文章
相關標籤/搜索