手写简易版Spring IOC

Spring 最核心的功能是 DI和AOP。

IOC 就是将Bean的创建交给容器,由容器来将Bean的实例进行注入。

那么就需要有一个容器,装着所有的由Spring管理的Bean。

DI的核心思想和流程是:

进行配置,标识所有Spring管理的Bean。

初始化容器:将所有的Bean加载到Bean容器里面。

初始化所有Bean:实例化Bean。根据AutoWrite等标记注解,将Bean实例注入到对应的Bean的属性里面。

使用Bean。

一、

简单的测试类Persion:

public class Persion {

    private String name;

    public void sayHello () {

        System.out.println("hello my name is :" + name);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Persion(String name) {
        this.name = name;
    }

    public Persion() {
    }


}

不使用IOC的方式,直接创建对象来调用。
Persion对象是需要手动,通过new关键字创建出来:

private Persion persion = new Persion();

使用IOC的方式,原理是通过反射技术,将Bean实例化,然后设置到对应的属性里面去。

 Person person = personClass.getDeclaredConstructor(String.class).newInstance("person2");
 Class demoClass = Demo.class;
 demo = demoClass.getDeclaredConstructor().newInstance();
 demo.person2 = person;

完整Demo如下:


public class Demo {

    //使用new的方式创建person对象.
    private Person person1 = new Person("person1");


    //使用IOC方式注入person对象
    private Person person2;

    public static void main(String[] args) {

        //通过直接new的方式
        new Demo().person1.sayHello();


        //通过反射的方式,
        Class personClass = Person.class;
        Demo demo = null;
        try {
            Person person = personClass.getDeclaredConstructor(String.class).newInstance("person2");
            Class demoClass = Demo.class;
            demo = demoClass.getDeclaredConstructor().newInstance();
            demo.person2 = person;

        } catch (Exception e) {
            e.printStackTrace();
        }

        demo.person2.sayHello();


    }

}


Spring的IOC的最核心的思路就是这个了,Spring基于这个核心的思想,扩展出了非常强大的功能。

你可能感兴趣的:(手写简易版Spring IOC)