SSM基础-Spring IOC容器

IOC

什么是IOC?IOC(Inverse of Control) 控制反转,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。将对象的创建权力反转给Spring框架!

在java当中一个类想要使用另一个类的方法,就必须在这个类当中创建这个类的对象,那么可能会出现如下情况, 比如A类当中创建着B对象,B类当中有C对象,C类当中有A对象,这个如果一个类出了问题,那么可能会导致这个框架出现问题。 Spring 将创建对象的权利给了IOC,在IOC当中创建了ABC三个对象吗,那么我们我们其他的类只需要调用集合, 大大的解决了程序耦合性的问题。

IOC解决什么问题?使用IOC可以解决程序耦合性高的问题。

IOC容器的底层原理

IOC的实现,依赖于以下3门技术

  1. dom4j解析xml文档;
  2. 工厂模式;
  3. 采用反射设计模式创建对象

DOM4J:是一个开源的,基于Java的库来解析XML文档,它具有高度的灵活性,高性能和内存效率的API。由电脑完成。

工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

采用反射设计模式创建对象:Class.newInstance() 或Constructor.newInstance() 

Spring实现IOC

public class Demo {
    public void hello() {
        System.out.println("hello world");
    }
}

1.xml配置文件,配置创建对象

<bean id="demo" class="com.qcby.Demo" />

2.创建工厂类

public class DemoFactory {
    //利用dom4j得到name所对应的value值
   public static Demo getDemo() throws Exception {
       //利用dom4j得到name所对应的value值
       String value="class路径";//demo在项目中的路径
       //通过反射创建对象
       Class clazz = Class.forName(value);
       //返回并创建demo对象
       return (Demo) clazz.newInstance();
   }
}

通过以上两步,我们基本上就可以得到我们所创建的对象。

IOC(接口) 

创建maven项目,在scr\main\java中创建com.qcby.Demo类

public class Demo {
    public void hello() {
        System.out.println("hello world");
    }
}

 在scr\main\resources中配置SpringConfig.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:类的唯一标识符 class:类的全路径名-->
    <bean id="demo" class="com.qcby.Demo" ></bean>
</beans>

IOC思想是基于IOC容器完成的,IOC的底层就是对象工厂。

Spring里边提供了IOC容器的实现的两种方式

  • BeanFactroy:IOC容器是Spring内部的使用接口,不提供给开发人员使用
public class DemoTest {
        //传统写法
        @Test
        public void run(){
            Demo demo = new Demo();
            demo.hello();
        }
        //spring写法
        @Test
        public void run1(){
            //创建spring工厂,加载配置文件
            BeanFactory ac = new ClassPathXmlApplicationContext("applicationContext.xml");
            //获取bean对象
            Demo demo = (Demo) ac.getBean("demo");
            demo.hello();
        }
}

注意】  BeanFactroy:加载配置文件的时候不会去创建对象,在使用对象的时候才会去创建对象

  • ApplicationContext:BeanFactory接口的子接口,提供了更多更强大的功能,一般由开发人员进行使用

public class DemoTest {
        //传统写法
        @Test
        public void run(){
            Demo demo = new Demo();
            demo.hello();
        }
        //spring写法
        @Test
        public void run1(){
            //创建spring工厂,加载配置文件
            ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
            //获取bean对象
            Demo demo = (Demo) ac.getBean("demo");
            demo.hello();
        }
}

 【注意加载配置文件的时候会把对象创建

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值