Giter Club home page Giter Club logo

simple-ioc's Introduction

Simple IoC

仿照 Spring 实现的一个简易版的 IoC 容器。

Features

  • 支持根据指定的路径从文件系统中获取资源
  • 支持XSD模式的XML验证
  • 支持<property/>标签以及valueref属性(即字符串与引用类型的属性注入)
  • 支持单例与原型Bean,并通过三级缓存解决了单例Bean的循环依赖问题

Blog

TODO

  • 扩展资源加载策略,如支持类路径与URL形式的资源
  • 提供byNamebyType方式的自动装配,以及@Autowired注解
  • 实现ApplicationContext体系

Quick start

第一个测试是模拟登陆接口的场景,分为ControllerServiceDao三层,XML配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-2.0.xsd">


	<bean id="loginController" class="cn.hecenjie.simpleioc.tests.objects.login.LoginController">
		<property name="loginService" ref="loginService" />
	</bean>
	
	<bean id="loginService" class="cn.hecenjie.simpleioc.tests.objects.login.LoginServiceImpl">
		<property name="userDao" ref="userDao" />
	</bean>
	
	<bean id="userDao" class="cn.hecenjie.simpleioc.tests.objects.login.UserDao"/>
	
</beans>

测试代码如下:

    @Test
    public void testGetBean() {
        ResourceLoader resourceLoader = new FileSystemResourceLoader();
        Resource resource = resourceLoader.getResource("C:\\Users\\canjie\\Desktop\\login.xml");
        DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
        BeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(factory);
        beanDefinitionReader.loadBeanDefinitions(resource);
        LoginController loginController = (LoginController) factory.getBean("loginController");
        assertEquals(loginController.login("Lihua", "123456789"), true);
    }

第二个测试是针对循环依赖问题的,XML配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-2.0.xsd">


	<bean id="person" class="cn.hecenjie.simpleioc.tests.objects.persons.Person">
		<property name="name" value="Lihua" />
		<property name="age" value="18" />
		<property name="idCard" ref="idCard" />
	</bean>
	
	<bean id="idCard" class="cn.hecenjie.simpleioc.tests.objects.persons.IdCard">
		<property name="id" value="441301188875468912" />
		<property name="owner" ref="person" />
	</bean>
	
</beans>

测试代码如下:

    @Test
    public void testCyclicDependence(){
        ResourceLoader resourceLoader = new FileSystemResourceLoader();
        Resource resource = resourceLoader.getResource("C:\\Users\\canjie\\Desktop\\persons.xml");
        DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
        BeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(factory);
        beanDefinitionReader.loadBeanDefinitions(resource);
        Person person = (Person) factory.getBean("person");
        IdCard idCard = (IdCard) factory.getBean("idCard");
        assertEquals(person.getName(), "Lihua");
        assertEquals(person.getAge(), 18);
        assertEquals(person.getIdCard(), idCard);
        assertEquals(idCard.getId(), 441301188875468912L);
        assertEquals(idCard.getOwner(), person);
    }

simple-ioc's People

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.