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}
posted @ 2022-03-22 15:49  世态炎凉cky  阅读(72)  评论(0)    收藏  举报