Spring概述
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架:
·从大小与开销两方面而言Spring都是轻量级的
·通过控制反转(IoC)的技术达到松耦合的目的
·提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统服进行内聚性的开发
·包含并管理应用对象的配置和生命周期,这个意义上是一种容器
·将简单的组件配置、组合成为复杂的应用,这个意义上是框架
Spring作用
·容器
·提供了对多种技术的支持,如(JMS,MQ支持,UnitTest等)
·AOP(事物,日志等)
·提供了众多方便应用的辅助类(JDBC Template等)
·对主流应用框架(Hibernate等)提供了良好的支持
Spring适用范围
·构建企业应用(SpringMVC+Spring+Hibernate/ibatis)
·单独使用Bean容器(Bean管理)
·单独使用AOP进行切面处理
IoC(控制反转)
控制权的转让,应用本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护,而具体被反转的是获得依赖对象的过程,控制被反转之后,获得依赖对象的过程由自身管理变为了由IoC容器主动注入,简单的来说,就是不需要我们自己去实例化所需要的对象,而是通过Spring的外部容器来帮我们去创建,需要使用的时候,直接从容器中取出来就好了。
DI(依赖注入)
所谓依赖注入,就是由IoC容器在运行期间,动态的将某种依赖关系注入到对象之中,也就是说在创建对象的同时,建立起对象与对象之间的依赖关系。
Spring配置文件详解
applicationContext.xml:这是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans
|---整个配置文件的根节点,包含一个或多个的Bean元素
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|---以上两条为基本的命名空间定义
xmlns:aop="http://www.springframework.org/schema/aop"
|---启用AOP功能时的命名空间
xmlns:tx="http://www.springframework.org/schema/tx"
|---启用声明事物时的命名空间
xmlns:context="http://www.springframework.org/schema/context"
|---启用自动扫描或注解装配时的命名空间
xmlns:task="http://www.springframework.org/schema/task"
|---启用定时任务时的命名空间
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd
"
|---与上述命名空间定义配套的schema定义文件的装载路径
>
<!-- 开启注解处理器 -->
<context:annotation-config/>
<!-- 开启组件自动扫描,扫描路径由base-package属性指定 -->
<context:component-scan base-package="com.mogon.test"/>
<!-- 开启注解声明定时任务 -->
<task:annotation-driven/>
<!-- 基于@AspectJ切面的注解处理器 -->
<aop:aspectj-autoproxy/>
<!-- 使用class属性指定类的默认构造方法创建一个实例Bean,名称由id属性指定 -->
<bean id="Bean实例名称" class="Bean类全名"/>
<!-- scope属性为prototype时表示每次将生成新的实例,即原型模式 -->
<bean id="Bean实例名称" class="Bean类全名" scope="prototype"/>
<!-- init-method属性用于指定对象实例化后要调用的初始化方法 -->
<!-- destroy-method属性用于指定对象在销毁时要调用的方法 -->
<bean id="Bean实例名称" class="Bean类全名" init-method="方法名" destroy-method="方法名"/>
<!-- property标签用于对Bean实例中的属性进行赋值-->
<bean id="Bean实例名称" class="Bean类全名">
<!-- 对于基本数据类型的值可由value属性直接指定 -->
<property name="Bean类中的属性名称" value="直接指定属性值"/>
<!-- 而ref则表示对其他Bean实例的引用 -->
<property name="Bean类中的属性名称" ref="要引用的Bean名称"/>
<property name="Bean类中的属性名称">
<!-- 创建一个内部匿名Bean实例赋值给指定的属性,该匿名Bean实例无法被外界访问 -->
<bean class="Bean类全名"/>
</property>
<property name="Bean类中的Set类型属性名称">
<!-- set标签用于创建一个Set类型的实例赋值给指定的Set类型属性,Set实例中的元素通过value或ref子标签指定。 -->
<set>
<!-- 对于基本数据类型的元素可由value标签生成 -->
<value>set中的元素</value>
<!-- 如果需要引用其他Bean实例作为Set元素的话,可由ref标签指定 -->
<ref bean="要引用的Bean的名称"/>
</set>
</property>
<property name="Bean类中的List类型属性名称">
<!-- List标签用于创建一个List类型的实例赋值给指定的List类型属性,List实例中的元素通过value或ref子标签指定。 -->
<list>
<!-- 对于基本数据类型的元素可由value标签生成 -->
<value>List中的元素</value>
<!-- 如果需要引用其他Bean实例作为List元素的话,可由ref标签指定 -->
<ref bean="要引用的Bean的名称"/>
</list>
</property>
<property name="Bean类中的Map类型属性名称">
<!-- Map标签用于创建一个Map类型的实例赋值给指定的Map类型属性,Map实例中的元素通过entry子标签指定。 -->
<map>
<!-- Map元素的键由entry标签的key属性直接指定,值则可由value或ref子标签指定 -->
<entry key="map元素的key">
<!-- 对于基本数据类型的元素可由value标签生成 -->
<value>map元素的value</value>
</entry>
<entry key="map元素的key">
<!-- 如果需要引用其他Bean实例的话,可由ref标签指定 -->
<ref bean="要引用的Bean名称"/>
</entry>
</map>
</property>
<property name="Bean类中的Properties类型属性名称">
<!-- 创建一个Properties类型的实例赋值给指定的Properties类型属性 -->
<props>
<!-- Properties实例中的属性元素由prop标签生成,属性项元素的键由key属性指定,属性项元素的值可直接放置在prop标签体中 -->
<prop key="properties元素的key">properties元素的value</prop>
</props>
</property>
<property name="Bean类中要初始化为null的属性名称">
<!-- null标签用于给需要赋null值的属性进行赋null值 -->
<null/>
</property>
</bean>