手写简易版Spring IOC
2021-07-29 本文已影响0人
Franck_
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<Demo> 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<Person> personClass = Person.class;
Demo demo = null;
try {
Person person = personClass.getDeclaredConstructor(String.class).newInstance("person2");
Class<Demo> demoClass = Demo.class;
demo = demoClass.getDeclaredConstructor().newInstance();
demo.person2 = person;
} catch (Exception e) {
e.printStackTrace();
}
demo.person2.sayHello();
}
}
Spring的IOC的最核心的思路就是这个了,Spring基于这个核心的思想,扩展出了非常强大的功能。