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();

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