一.spring容器组成
1.spring ORM:对象/关系映射,可使用声明式事物管理.(ibatis,hibernate,jdo,jpa,toplink等框架的支持).主要是对数据库操作管理。
2.spring WEB:提供了基础的针对web开发的集成特性(jsp,html,js,css等)。
3.spring DAO:提供了JDBC的抽象层,消除冗长的JDBC编码和解析数据库特有的错误代码。并且还提供了更好的声明性事物管理方法,对所有的pojos都适用。
4.spring Context:对bean工作的扩展,比如对EJB,JMX,JNDI,validation,Remoting,scheduling等扩展插件的支持
5.spring AOP:
(1)切面(Aspect)是主要是把系统模块化,便于解耦;
(2)连接点(joinPoint)主要是把每个切面进行连接;
(3)通知(Advice)通过每个切面的实现情况通知应用系统;
(4)切入点(pointCut)主要是具体的连接点(类名,方法名);
(5)引入(introduction)主要是为已有类进行新方法属性的配置,而不需要改变现有类;
(6)代理(Proxy)主要是通知应用到目标对象对应的创建对象;
(7)织入(Weaving)把切面植入到目标对象,实现一个新的代理过程。
6.Spring Core:提供了IOC和依赖注入特征(BeanFactory)。IOC控制反转,主要是把你设计好的类通过系统控制,而不是类内部控制。依赖注入:创建调用者由spring容器完成,然后在注入给调用者。
7.Spring WebMVC:提供了MVC框架的实现,提供了一种清晰的分离模式,还可以借助spring框架的其他特性。
附加:Spring 实现AOP是依赖JDK动态代理和CGLIB代理实现的。
以下是JDK动态代理和CGLIB代理简单介绍
JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成对目标对象的代理。
CGLIB代理:实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象是针对目标类扩展的子类。CGLIB是高效的代码生成包,底层是依靠ASM(开源的java字节码编辑类库)操作字节码实现的,性能比JDK强
二.
1.容器bean的生命周期
bean建立,初始化,属性注入使用,销毁。
2.spring事物详解
(1)通过 @Controller 注解将 MixLayerUserService 变成 Web 层的 Controller,同时也是 Service 层的服务类。此外,由于直接使用 JdbcTemplate 访问数据,所以 MixLayerUserService 还是一个 DAO
例子:
<!--②使用aop和tx命名空间语法为MixLayerUserService所有公用方法添加事务增强 -->
<aop:config proxy-target-class="true">
<aop:pointcut id="serviceJdbcMethod"
expression="execution(public * user.mixlayer.MixLayerUserService.*(..))"/>
<aop:advisor pointcut-ref="serviceJdbcMethod"
advice-ref="jdbcAdvice" order="0"/>
</aop:config>