版权声明:本文为博主原创文章,未经博主允许不得转载。 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。