目录
源码根目录(spring-framework-4.1.2.RELEASE)
BeanFacotry.getBean方法(测试现在都用的少,用的多的是spring-test-4.1.2.RELEASE注解测试)
ApplicationContext(是BeanFactory的子接口)
源码根目录(spring-framework-4.1.2.RELEASE)
最少添加jar文件
applicationContext.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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- id对应于对象的名称,class类似于new 后面的类名:全限定类名,一般都不能写接口和抽象类 -->
<bean id="myBean" class="cn.mytest.spring.day1.d_test.MyBean" ></bean>
</beans>
配置文件的提示信息(代码提示)
Junit
public class MainTest {
@Test
public void testName() throws Exception {
// 解析配置文件
ClassPathResource resource = new ClassPathResource("applicationContext.xml");
// 获取BeanFactory
BeanFactory beanFactory = new XmlBeanFactory(resource);
// 通过bean.id获取bean对象
MyBean bean = (MyBean) beanFactory.getBean("myBean");
// 调用方法
String hi = bean.hi("小红");
System.out.println(hi);
}
}
BeanFacotry.getBean方法(测试现在都用的少,用的多的是spring-test-4.1.2.RELEASE注解测试)
第一种
根据bean id获取bean的实例,如果定义了2个bean不会报错(获取对象必须要强转)
// 通过bean.id获取bean对象
// 根据bean id获取bean的实例,如果定义两个bean不会报错
// 获取对象必须强转
MyBean bean = (MyBean) beanFactory.getBean("myBean");
<!-- id对应于对象的名称,class类似于new 后面的类名:全限定类名,一般都不能写接口和抽象类 -->
<bean id="myBean" class="cn.mytest.spring.day1.b_beanfactory.MyBean"></bean>
<bean id="myBean1" class="cn.mytest.spring.day1.b_beanfactory.MyBean"></bean>
第二种
除了类型不用强转,其他同第一种
// 通过bean.id获取bean对象
// 除了类型不用强转,其他同第一种
MyBean bean = beanFactory.getBean("myBean", MyBean.class);
第三种
必须要求配置文件里面只能配置一个MyBean的实例,配置多个异常:
// 通过bean.id获取bean对象
// 必须要求配置文件里面只能配置一个MyBean的实例,配置多个异常
MyBean bean = (MyBean) beanFactory.getBean(MyBean.class);
API
ApplicationContext(是BeanFactory的子接口)
功能更多
应用上下文件ApplicationContext是建立在BeanFactory基础上的一种更高层次的Spring IoC容器,其除了具有普通BeanFactory的全部功能以外,还加入了以下功能:
提供了文本信息解析工具,包括I18N的支持
提供了载入文件资源的通用方法
提供了发送事件的功能
@Test
public void testName2() throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("cn/mytest/spring/day1/c_application/bean.xml");
MyBean bean = (MyBean) context.getBean("myBean");
String hi = bean.hi("小红");
System.out.println(hi);
}
web.xml:提供web程序用法
面试题:
问ApplicationContext和BeanFactory的区别
最重要的区别:实例化bean对象的时机
ApplicationContext和BeanFactory的一个比较重要的区别就是,
ApplicationContext会在启动的时候自动去初始化配置的bean(默认配置),
而BeanFactory只是在用到bean的时候再去初始化Bean。
这个过程可以通过bean的construtor来跟踪。
而通过lazy-init配置,可以手动的在ApplicationContext环境下控制bean的初始化时机。如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“,如下:
<beans default-lazy-init="true“ ...>