1.设么是Bean?
Spring最大的特点就是IOC控制反转,IOC容器中装的就是Bean对象,Bean也就是spring、容器管理的java对象,在spring中可以通过xml文件配置。
//新建HelloWord类,通过xml将其托管
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("My Message : " + message);
}
}
<?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-3.0.xsd">
<bean id = "helloWorld" class = "com.zoltanraffai.HelloWorld">
<property name = "message" value = "Hello World!"/>
</bean>
</beans>
2.BeanFactory
BeanFactory是Spring的基础接口,提供了访问容器的基础方法,其中常用的就是getBean拿到实例。一般通过XMLBeanFactory实现类获取。
public class HelloWorldApp{
public static void main(String[] args) {
XmlBeanFactory factory = new XmlBeanFactory (new ClassPathResource("beans.xml"));
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
obj.getMessage();
}
}
3.ApplicationContext
ApplicationContext继承自BeanFactory接口,ApplicationContext包含了BeanFactory中所有的功能。
1.可以支持国际化
2.载入多个上下人关系,使得每一个上下文都专注于特定的层次,比如web层
3.BeanFactory采用延迟加载,只有在使用bean的时候才会进行实例化,如果某个属性没有注入,只能在调用getBean()的时候才会抛出异常。
4.二者都支持PostProcesser,但是BeanFactory需要手动的注册,而ApplicationContext会自动检测bean对应的java类是否实现了BeanFactory。