Java回顾:springAOP、声明式事务

目录

一、springAOP

1.1、概述 

1.2、spring的AOP

【1】AOP相关术语: 面试点

1.3、AOP开发方式

1.4、 全xml方式实现AOP

1.4.1 jar包

1.4.2 接口及实现类(目标对象)

1.4.3 xml配置及切面类(增强方法)

1.4.4 测试xmlAop

1.5、切入表达式练习

1.6、半xml半注解实现AOP

1.6.1 xml开启扫包及aop注解支持:

1.6.2 接口及实现类(加注解)

1.6.3 切面类(通知类)改造、简化切入点表达式、加注解用于扫包

1.7、全注解实现AOP

1.7.1 声明配置类

1.7.2 测试类指定资源路径

二、声明式事务

2.1、事务须知

2.2、事务相关api介绍 

2.3.1 PlatformTransactionManager

2.3.2 TransactionDefinition(了解)

2.3、基础环境搭建

2.4、全xml配置声明式事务实现

2.5、半xml和半注解配置实现事务

2.6、全注解配置实现事务 


一、springAOP

1.1、概述 

AOP:全称是 Aspect Oriented Programming
    即:面向切面编程,是一种【编程范式】。
	作用:在程序【运行期间】,不修改源码的基础上对已有方法进行增强
	优势:
		减少重复代码
		提高开发效率
		维护方便
	AOP 的实现方式: 动态代理
  	依赖jdk的Proxy
  	依赖cglib的Enhancer

 1.2、spring的AOP

【1】AOP相关术语: 面试点

  • Target(目标对象): 要增强的对象(被代理的类对象)

  • Proxy(代理对象) : 对目标对象的增强的对象 (生成的代理类对象)

  • Joinpoint(连接点): 目标对象中的所有方法(被代理类中的所有方法)

  • Pointcut(切入点): 要被增强的方法(被代理类中要增强的方法)

  • Advice(通知/增强): 增强的那段【代码方法】以及代码切入的位置

    通知包含了2个维度内容:在什么位置,切入什么

示例:

    前置通知:在方法之前进行增强

    后置通知 :在方法之后进行增强

    异常通知:在方法异常进行增强

    最终通知 :最终执行的方法进行增强

    环绕通知:  单独使用(以上所有通知)

  • Aspect(切面): 切入点+通知=切面

目标方法和增强方法合到在一起 叫做切面

说白了切面描述了在什么样的目标方法下(切入点)的什么位置(通知类型)切入了什么样的(增强代码)

  • Weaving(织入):

    将增强的代码(方法)合并到目标方法的过程 叫织入过程;

Spring AOP底层实现技术就是动态代理

spring底层会自动抉择使用Jdk Proxy或Enhancer(cglib)

1.3、AOP开发方式

  • XML方式
  • XML+注解方式
  • 注解方式

1.4、 全xml方式实现AOP

案例分析:

案例: 对AccountServiceImpl下的方法进行增强;
步骤如下:
1.导入相关jar坐标;  
2.自己封装要增强方法,并保存在某个专用类中【切面类/通知类/增强类】
3.将所有进行AOP操作的资源【切面类+目标对象】加载到IOC容器中;    
3.编写配置文件
	告诉spring【切面类中的增强方法】在哪个对象的哪个方法上增强使用;

1.4.1 jar包

<dependencies>
    <!-- spring核心jar包,已经依赖的AOP的jar -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <!-- spring整合单元测试的jar -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <!-- 单元测试的jar -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <!-- 切入点表达式 -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.6.8</version>
    </dependency>
</dependencies>

 1.4.2 接口及实现类(目标对象)

public interface AccountService {
    void add();
    void update();
    void delete();
    String findAll(String s);
}

public class AccountServiceImpl implements AccountService {
    @Override
    public void add() {
        Sys
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值