Spring:IOC底層原理

IOC操作

  1. 實質:把對象的創建交給spring來管理
  2. IOC操作:
    • 文件配置方式
    • 註解方式
  3. IOC底層原理:
    • xml配置文件:配置要創建對象類
    • dom4j解析配置文件
    • 工廠設計模式
    • 反射:創建類的對象

IOC底層原理:

  1. 最底層:
    缺陷:耦合度太高
   public class User(){add();}
   //在service中調用add()方法
   User user=new User();
   user.add();
  1. 工廠模式:
   public class UserService{public void add()};
   //創建工廠類
   public class Factory{ getService(){return new UserService();}}
   目的:UserServlet要得到一個User對象
   public class UserServlet{UserService s=Factory.getService();}
  1. IOC原理:
    目的:得到UserService對象
    好處:以後只用修改xml文件
    具體做法:
    1. 創建xml文件
<bean id="user" class="cn.itclass.ioc.User"></bean>
  1. 創建工廠類:使用dom4j解析配置文件+反射
    1. 使用dom4j解析xml文件
    根據id值user,得到id對應的class屬性的值
    String classValue=“class屬性值”;
    2. 使用反射創建類對象
    String cla=Class.forName(classValue); //類
    UserService service=cla.newInstance(); //創建類的對象
    //返回對象
    return service;

IOC使用案例:

  1. 導入jar包

    • beans context core expression 基本核心包
    • log4j:支持日誌輸出的jar包
      在這裏插入圖片描述
  2. 創建類,在類裏面創建方法

  3. 創建spring配置文件,配置創建類

  4. 寫代碼測試對象創建

    以下是配置文件中的內容:

    • 配置文件中引入schema約束
    • 配置文件已經封裝好,可以直接得到對象
    • spring核心配置文件名稱和位置不是固定的
      建議放到src下面,官方建議applicationContext.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">
             
             <!-- IOC入門 -->
             <bean id="user" class="cn.itclass.ioc.User"></bean>
         
     </beans>
 測試用例:
	@Test 
	public  void testUser () {
		//1. 這一步作用:加載配置文件,根據配置文件中的內容創建好一個對象
		/*
		 * dom4j解析配置文件,但是配置文件已經封裝好一個對象
		 * 這一步作用:加載配置文件,根據配置文件中的內容創建好一個對象
		 */
		ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
		//參數是xml配置文件的地址
		
		//2.得到配置對象
		User user=(User) context.getBean("user"); //配置文件中的id值
		System.out.println(user);
		user.add();

	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章