一、IoC/DI(控制反转/依赖注入)
目的:基于MVC分层模式的开发是基于责任链机制的,导致对象间耦合性过高,不利于后期系统的维护升级。需要使用IoC来解除责任链上对象之间的耦合。
控制:控制类的对象
反转:本来由程序员完成的创建对象的工作现在交由Spring IoC来完成。
xml校验工具:dtd的升级版——Schema,优点是具有扩展性
Spring IoC创建对象的三种方式:
1.使用构造方法创建
无参构造
有参构造
2. 静态工厂
3. 实例工厂
工厂的作用:实现创建者和调用者的分离。
给bean赋值(注入)的方法:
1. 构造方法
2. setter/getter
依赖注入:当一个类A需要依赖类B时,将B的实例化对象注入给A的过程。
注入:赋值
二、AoP(面向切面编程)
原理:动态代理(JDK动态代理和CGLIB动态代理)
目的:在不修改原有代码的基础上实现扩展。
主要概念:
切点、前置通知、后置通知、环绕通知、异常通知、织入
实现:
1.基于Schema-Base方式
特点:需要实现接口
2. 基于AspectJ方式
3. 使用注解(AspectJ)
Spring和MyBatis的整合
Scope属性:选择单例模式还是原型模式创建对象
开启自动注入 auto-wire
三、声明式事务(tx)
基于AoP
步骤:
配置数据源
配置事务管理Bean,
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
配置事务管理方法,
<tx:advice id="myadvice" transaction-manager="dataSourceTransactionManager">
<tx:attributes>
<!--缩小选定方法的范围-->
<tx:method name="sel*"/>
<tx:method name="del*"/>
<tx:method name="upd*"/>
<tx:method name="ins*"/>
</tx:attributes>
</tx:advice>
配置切面
<aop:config>
<aop:pointcut id="my" expression="execution(* com.bjsxt.service.*.*(..))"/>
<aop:advisor advice-ref="myadvice" pointcut-ref="my"/>
</aop:config>