Spring IOC DefaultListableBeanFactory解析1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GoSaint/article/details/84102202

       Spring的核心所在就是IOC以及AOP。但是我认为最为重要的还是IOC。关于IOC的基本概念我不涉及,反正就是将对象以及以来的权力交给Spring容器来处理。通常我们Spring入门的时候都会创建一个Java Bean。然后配置文件去定义这个bean。之后使用ApplicationContext或者BeanFactory来获取这个Bean的对象。我首先定义了一个User:

public class User {
	
	private int id;
	private String name;
	private String password;
    ......
     省略setter、getter、toString


}

     在ApplicationContext.xml中定义bean:

<?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
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="user" class="org.apache.czg.start_re.ioc.User">   
	</bean>

</beans>

     下面是我的测试类:首先测试ApplicationContext容器获取bean

    @Test
    public void testIoc() {
		@SuppressWarnings("resource")
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		User user = (User)context.getBean("user");
		user.setId(66);
		user.setName("caozg");
		user.setPassword("lucu%%%");
		System.out.println(user);
    }

    大家都知道Spring容器有两个,一个是ApplicationContext,还有一个是BeanFactory。BeanFactory被认为是Spring容器中的基类,并且是屌丝,它的实现是DefaultListableBeanFactory。在Spring3之前,我们还可以使用XmlBeanFactory。它继承了DefaultListableBeanFactory。但是spring3.1之后XmlBeanFactory过时啦,成为遗留容器。

/**
 * @deprecated Spring 3.1 
 * {@link XmlBeanDefinitionReader}
 *
 */
@Deprecated
@SuppressWarnings({"serial", "all"})
public class XmlBeanFactory extends DefaultListableBeanFactory {}

    因此,下面的Beanfactory的实现使用的是DefaultListableBeanFactory,而不是XmlBeanFactory:

        @Test
	public void testIoc2() {
		/**
		 * 1 读取资源文件
		 */
		Resource resource = new ClassPathResource("applicationContext.xml");
		/**
		 * 2 xmlBeanFactory过时啦,这里使用DefaultListableBeanFactory初始化IOC容器
		 */
		BeanFactory factory = new DefaultListableBeanFactory();
		/**
		 * 3 构建Bean注册读取器、读取器读取Bean工厂信息
		 */
		BeanDefinitionReader bdr=new XmlBeanDefinitionReader((BeanDefinitionRegistry) factory);  
		/**
		 * 4 根据资源文件、注册Bean
		 */
		bdr.loadBeanDefinitions(resource);
		
		User user = factory.getBean(User.class);
		user.setId(66);
		user.setName("caozg");
		user.setPassword("lucu%%%");
		System.out.println(user);
	}

    下图是SpringIOC容器结构:

    上述代码可以看出,先读取配置文件,然后i创建容器。之后Bean注册读取配置文件注册Bean。

猜你喜欢

转载自blog.csdn.net/GoSaint/article/details/84102202
今日推荐