Java 简单模拟 Spring 的 IOC 和 DI
模拟 Spring 的 IOC 和 DI
FakerSpring 类
该类实现了简单的 spring 对象的控制反转和依赖注入
package com.ndky.fakeSpring;
import com.sun.xml.internal.xsom.impl.scd.Step;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Locale;
/**
* @className:FakeSpring
* @Description 模拟 Spring 的IOC 和 DI
* @Author: ckyfoever
* @Date: 2022/3/22 13:37
*/
public class FakeSpring {
private HashMap<String,Object> beanHaspMap;
public FakeSpring() {
beanHaspMap = new HashMap<String,Object>();
System.out.println("初始化 fakerSpring");
System.out.println("----------------------");
}
// 根据 class 创建对象
public <T> T creatBean(Class<T> beanClass) {
T beanObject;
try {
beanObject = beanClass.newInstance();
Field[] fields= beanClass.getDeclaredFields();
// 循环创建对象的参数列表
// 若该参数对象已经创建则注入
for (Field f : fields) {
if(beanHaspMap.get(f.getName()) != null) {
f.setAccessible(true);
f.set(beanObject,beanHaspMap.get(f.getName()));
}
}
} catch (Exception e) {
return null;
}
beanHaspMap.put(beanClass.getSimpleName().toLowerCase(Locale.ROOT),beanObject);
return beanObject;
}
// 根据 class name 获取对象
public <T> T getBean(String beanName) {
return (T) beanHaspMap.get(beanName.toLowerCase(Locale.ROOT));
}
}
bean 类
People类
package com.ndky.bean;
/**
* @className:People
* @Description TODO
* @Author: ckyfoever
* @Date: 2022/3/22 13:41
*/
public class People {
public int age;
public String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "People{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
student 类
package com.ndky.bean;
/**
* @className:Student
* @Description TODO
* @Author: ckyfoever
* @Date: 2022/3/22 14:16
*/
public class Student {
public People people;
public int grade;
public People getPeople() {
return people;
}
public void setPeople(People people) {
this.people = people;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
@Override
public String toString() {
return "Student{" +
"people=" + people +
", grade=" + grade +
'}';
}
}
Main函数
package com.ndky.main;
import com.ndky.bean.People;
import com.ndky.bean.Student;
import com.ndky.fakeSpring.FakeSpring;
/**
* @className:Main
* @Description TODO
* @Author: ckyfoever
* @Date: 2022/3/22 13:42
*/
public class Main {
public static void main(String[] args) {
FakeSpring fakeSpring = new FakeSpring();
People people = fakeSpring.creatBean(People.class);
people.name = "wzp";
people.age = 20;
System.out.println(people);
Student student = fakeSpring.creatBean(Student.class);
System.out.println(student.toString());
}
}
运行结果
/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/bin/java -
初始化 fakerSpring
----------------------
People{age=20, name='wzp'}
Student{people=People{age=20, name='wzp'}, grade=0}

浙公网安备 33010602011771号