Spring学习笔记2

使用注解实现事务(声明式事务)
目标:通过事务 使以下方法 要么全成功、要么全失败

  1. jar包
    spring-tx-4.3.9.RELEASE 事务
    ojdbc.jar
    commons-dbcp.jar 连接池使用到数据源
    commons-pool.jar 连接池
    spring-jdbc-4.3.9.RELEASE.jar
    aopalliance.jar

  2. 配置
    jdbc\mybatis\spring
    增加事务tx的命名空间

<!-- 增加对事务的支持 -->
<tx:annotation-driven transaction-manager="txManager"  />
  1. 使用

将需要 成为事务的方法 前增加注解:
@Transactional(readOnly=false,propagation=Propagation.REQUIRED)

AOP:面向方面编程

一个普通的类 变成 有特定功能的类
a.继承类 b.实现接口 c.注解 d.配置

public class MyFilter exntends/implements Xx
{

}

类 变成 “通知” :实现接口

前置通知实现步骤:

  1. jar
    aopaliance.jar
    aspectjweaver.jar

  2. 配置

  3. 编写
    aop:每当之前add()之前 自动执行一个方法log();
    addStudent(); 业务方法(IStudentService.java中的 addStudent())
    before(); 自动执行的通知,即aop前置通知

public class Xxx
{
	@Test
	a(){}
}

如果出现异常:类似java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
则说明缺少jar

后置通知:

  1. 通知类 ,普通实现接口
  2. 业务类、业务方法
    StudentServiceImpl中的addStudent()
  3. 配置:
    将业务类、通知 纳入springIOC容器
    定义切入点(一端)、定义通知类(另一端),通过pointcut-ref将两端连接起来

异常通知:
根据异常通知接口的定义可以发现,异常通知的实现类 必须编写以下方法:

	public void afterThrowing([Method, args, target], ThrowableSubclass)	
	public void afterThrowing(Method, args, target, ThrowableSubclass)
	public void afterThrowing( ThrowableSubclass)

环绕通知: 在目标方法的前后、异常发生时、最终等各个地方都可以 进行的通知,最强大的一个通知;
可以获取目标方法的 全部控制权(目标方法是否执行、执行之前、执行之后、参数、返回值等)

  • 在使用环绕通知时,目标方法的一切信息 都可以通过invocation参数获取到
  • 环绕通知 底层是通过拦截器实现的。

实现注解实现 通知 ,aop

  1. jar
    与 实现接口 的方式相同

  2. 配置
    将业务类、通知 纳入springIOC容器
    开启注解对AOP的支持 <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    业务类 addStudent - 通知

  3. 编写

通知:

@Aspect  //声明该类 是一个 通知
public class LogBeforeAnnotation  {
}

注意:通过注解形式 将对象增加到 ioc容器时,需要设置 扫描器

<context:component-scan base-package="org.lanqiao.aop"></context:component-scan>
  • 扫描器 会将 指定的包 中的 @Componet @Service @Respository @Controller修饰的类产生的对象 增加到IOC容器中
    @Aspect不需要 加入扫描器,只需要开启即可:<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

  • 通过注解形式 实现的aop,如果想获取 目标对象的一些参数,则需要使用一个对象:JointPoint

注解形式的返回值:

  1. 声明返回值 的参数名:
@AfterReturning( pointcut= "execution(public * addStudent(..))" ,returning="returningValue" ) 
	public void myAfter(JoinPoint jp,Object returningValue) {//returningValue是返回值,但需要告诉spring
		System.out.println("返回值:"+returningValue );
  • 注解形式实现aop时,通知的方法的参数不能多、少

  • 实现接口形式、注解形式 只捕获声明的特定类型的异常,而其他类型异常不捕获。
    cath()

通过 配置将 类变通知
基于Schema配置
类似 与 实现接口的方式

  • 接口方式通知:public class LogAfter implements AfterReturningAdvice
  • Schema方式通知:
    a.编写一个普通类 public class LogAfter {}
    b.将该类 通过配置,转为一个“通知”

如果要获取目标对象信息:
注解、schema:JoinPoint
接口:Method method, Object[] args, Object target

  • schema形式 和注解形式相似,不同之处: 注解形式 使用了注册@After, schmema形式进行了多余的配置
发布了41 篇原创文章 · 获赞 1 · 访问量 553

猜你喜欢

转载自blog.csdn.net/qq_41620020/article/details/105106605