自己实现一个简单的SpringIOC功能

23 阅读1分钟

这是一个简单的IoC容器 SimpleIoCContainer,允许你注册Bean定义并获取Bean实例。这只是一个基本的示例,实际的IoC容器要复杂得多,包括更多功能,如依赖注入、生命周期管理、AOP等。



import java.util.HashMap;
import java.util.Map;

class BeanDefinition {
    private Class<?> beanClass;

    public BeanDefinition(Class<?> beanClass) {
        this.beanClass = beanClass;
    }

    public Class<?> getBeanClass() {
        return beanClass;
    }
}
// 简单的IoC容器
class SimpleIoCContainer {
    private Map<String, BeanDefinition> beanDefinitionMap = new HashMap<>();
    private Map<String, Object> beanMap = new HashMap<>();

    // 注册Bean定义
    public void registerBean(String beanName, Class<?> beanClass) {
        BeanDefinition beanDefinition = new BeanDefinition(beanClass);
        beanDefinitionMap.put(beanName, beanDefinition);
    }

    // 获取Bean实例
    public Object getBean(String beanName) throws Exception {
        if (!beanDefinitionMap.containsKey(beanName)) {
            throw new IllegalArgumentException("No bean named " + beanName + " is defined");
        }

        if (beanMap.containsKey(beanName)) {
            return beanMap.get(beanName);
        }

        BeanDefinition beanDefinition = beanDefinitionMap.get(beanName);
        Class<?> beanClass = beanDefinition.getBeanClass();
        Object bean = beanClass.getDeclaredConstructor().newInstance();
        beanMap.put(beanName, bean);
        return bean;
    }
}
// 示例Bean类
class HelloWorldService {
    public void sayHello() {
        System.out.println("Hello, World!");
    }
}

 class SimpleIoCExample {
    public static void main(String[] args) throws Exception {
        // 创建IoC容器
        SimpleIoCContainer container = new SimpleIoCContainer();

        // 注册Bean定义
        container.registerBean("helloWorldService", HelloWorldService.class);

        // 获取Bean实例
        HelloWorldService helloWorldService = (HelloWorldService) container.getBean("helloWorldService");

        // 使用Bean
        helloWorldService.sayHello();
    }
}