spring ioc原理分析

spring ioc原理分析

  • spring ioc 的概念
  • 简单工厂方法
  • spirng ioc实现原理

spring ioc的概念

ioc: 控制反转 将对象的创建由spring管理。比如,我们以前用new一个对象的方式自己创建一个对象,现在使用spring,不必自己new一个对象了,而是使用了另一种方式。

spring ioc 入门

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">
       <bean id="helloService" class="demo1.HelloServiceImpl"></bean>
</beans>

HelloService.java

public interface HelloService {
    void sayHello();
}

HelloServiceImpl.java

public class HelloServiceImpl implements HelloService {
    private String info;

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public void sayHello() {
        System.out.println("hello--" + info);
    }
}

使用spring创建对象

@Test
    // Spring开发
    public void demo2() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        HelloService helloService = (HelloService)applicationContext.getBean("helloService");
        helloService.sayHello();
    }

简单工厂方法

要想理解spring ioc的原理,必选要知道简单工厂方法
下面介绍简单工厂方法
​简单工厂模式是一种创建模式,创建模式是帮助我们更好地组织创建对象的代码,适应不同情况下的创建和初始化对象。

简单工厂方法的结构

简单工厂方法结构

举例

以上面的为例:
HelloService为抽象产品
HelloServiceImpl为具体产品
我们再写一个具体产品:
HelloServiceImpl2

public class HelloServiceImpl2 implements HelloService {
     public void sayHello() {
        System.out.println("hello-- HelloServiceImpl2");
    }
}

对于HelloService,我们以前的客户端调用是这样的:

@Test
    // 传统方式
    public void demo1() {
        // 造成程序紧密耦合.
        HelloService helloService = new HelloServiceImpl();
        helloService.sayHello();
        HelloService helloService2 = new HelloServiceImpl();
        helloService2.sayHello();
    }

我们是用new的方式创建一个对象,那如何用工厂方法创建对象?
首先,我们得有一个创建Bean的工厂类
BeanFactory //简单工厂

public class BeanFactory{
    public Object getHelloService(String beanName){
        if(beanName.equals("HelloService1")){
           return new HelloServiceImpl();
        } else if (beanName.equals("HelloService2")){
           return new HelloServiceImpl2();
        } else {
           return null;
        }
    }
}

这样,我们以后想获得HelloService就可以这样:
// 客户端调用

BeanFactory beanFactory = new BeanFactory();
HelloService helloService = (HelloService)beanFactory.getHelloService("HelloService1");

spirng ioc实现原理

spring ioc的实现原理,实际上就是简单工厂+sax解析xml+反射获取类对象
对于BeanFactory中,我们如下做:

public class BeanFactory{
    public Object getBean(String beanName){
        // 反射 + 解析配置文件
        return Class.forName("类名").new Instance();
    }
}

通过id,我们通过解析spring配置文件解析到id所对应的类,然后获取全名,通过反射创建类。这样,我们想获得bean,不需要修改代码,只需要新增类,然后再在配置文件中配置一下。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值