1,Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件
2,Spring IoC 容器利用 Java 的 POJO 类和配置元数据来生成完全配置和可执行的系统或应用程序
3,配置元数据可以通过 XML,Java 注释或 Java 代码来表示
4,面向方面(切面)的程序设计(AOP)
BeanFactory 容器(已过时)
XmlBeanFactory factory = new XmlBeanFactory
(new ClassPathResource("Beans.xml"));
配置文件 Beans.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-3.0.xsd">
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
<property name="message" value="Hello World!"/>
</bean>
</beans>
ApplicationContext 容器
- FileSystemXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径。
ApplicationContext context = new FileSystemXmlApplicationContext
("C:/Users/ZARA/workspace/HelloSpring/src/beans.xml");
- ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
- WebXmlApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean。
Spring Bean 的生命周期
基本定义
<bean id="..." class="..."> </bean>
初始化
指向某个类的方法名为init()的方法作为初始化的回调方法
<bean id="xxxBean"
class="xxx.xxxBean" init-method="init"/>
或者继承 InitializingBean
public class ExampleBean implements InitializingBean {
public void afterPropertiesSet() {
// do some initialization work
}
}
销毁
指向某个类的方法名为destroy()的方法作为销毁的回调方法
<bean id="xxxBean"
class="xxx.xxxBean" destroy-method="destroy"/>
或者继承 DisposableBean
public class ExampleBean implements DisposableBean {
public void destroy() {
// do some initialization work
}
}
后置处理
在初始化之前或者在销毁之后执行的操作
继承接口BeanPostProcessor
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.BeansException;
public class InitHelloWorld implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在初始化之前 : " + beanName);
return bean; // you can return any other object as well
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在销毁之后: " + beanName);
return bean; // you can return any other object as well
}
}
Spring Bean 作用域
关键字:scope
<bean id="..." class="..." scope="singleton"></bean>
作用域 | 描述 |
---|---|
singleton | Bean以单例方式存在,默认值 |
prototype | 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean() |
request | 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境 |
session | 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境global-session 一般用于Portlet应用环境,改作用于仅适用于WebApplicationContext环境 |
Spring Bean 的定义继承
关键字parent,继承:
继承bean.xml中其他的bean定义,这里xxx2继承了xxx1,可以向java代码一样重写其中的property标签
<bean id="xxx2" class="com.xxx.xxx" parent="xxx1">
<property name="xxx1" value="Hello India!"/>
<property name="xxx2" value="Namaste India!"/>
</bean>
关键字abstract,抽象
abstract=”true”,表明继承这个bean的bean不能得到其中property的任何一个值,它只是充当一个模板
<bean id="xxx1" abstract="true">
<property name="xxx1" value="Hello World!"/>
<property name="xxx2" value="Hello Second World!"/>
<property name="xxx3" value="Namaste India!"/>
</bean>