博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring学习笔记(五)
阅读量:7043 次
发布时间:2019-06-28

本文共 4085 字,大约阅读时间需要 13 分钟。

本教程对应视频课程:

1、SpringAOP

1.1、AOP的概念

Aspect oritention programming(面向切面编程),Spring的AOP使用动态代理实现,如果一个类实现了接口,那么spring就使用JDK的动态代理完成AOP,如果一个类没有实现接口,那么spring就是用cglib完成AOP;

AOP当中的概念:

①切入点Pointcut:在哪些类,哪些方法上面切(where);

②通知/增强Advice:在方法的什么时机(when)做什么(what);

③切面Aspect:切入点+通知:什么时间,什么地点,干什么

④织入Weaving:把切面加入到对象,并创建出代理对象的过程(Spring自动搞定)

1.2、xml中配置aop

1、添加jar包

com.springsource.org.aopalliance-1.0.0.jar、com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

2、引入aop的命名空间

3、xml配置

注意执行表达式的格式:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)

modifiers-pattern:修饰符

ret-type-pattern:返回值的类型

declaring-type-pattern:这个方法的类名

name-pattern:方法名

param-pattern:参数

throws-pattern:异常

语法案例:

1.任意公共方法的执行:execution(public * *(..))2.任何一个名字以“set”开始的方法的执行:execution(* set*(..))3.AccountService接口定义的任意方法的执行:execution(* com.xyz.service.AccountService.*(..))4.在service包中定义的任意方法的执行:execution(* com.xyz.service.*.*(..))5.在service包或其子包中定义的任意方法的执行:execution(* com.xyz.service..*.*(..))

1.3、Spring中的各种通知

aop:before(前置通知):在方法执行之前执行增强操作(增强类中的指定增强方法)

aop:after-returning(后置通知):在方法正常执行完成之后执行增强操作;

异常通知:在业务方法中出现异常,需要调用的增强操作 throwing="ex":决定方法定义为:public void rollback(Throwable ex):

aop:after(最终通知):在方法执行之后执行,相当于在finally里面执行

aop:around(环绕通知):把方法的执行包裹起来,环绕通知有两个要求

​ 1、方法必须要返回一个Object(返回的结果)

​ 2、方法的第一个参数必须是ProceedingJoinPoint(可以继续向下传递的切入点)

完整代码

//PersonServicepackage cn.org.kingdom.service;public interface PersonService {    public abstract int add(String msg);}//PersonServiceImplpackage cn.org.kingdom.service.impl;import org.springframework.stereotype.Service;import cn.org.kingdom.service.PersonService;@Service("personService")public class PersonServiceImpl implements PersonService {    public int add(String msg) {        System.out.println("执行add操作");        System.out.println(10/0);        return 0 ;     }}//事务管理类package cn.org.kingdom.ts;import org.aspectj.lang.ProceedingJoinPoint;import org.springframework.stereotype.Component;@Component("ts")public class Transaction {    public void begin(){        System.out.println("开启事务");    }    public void commit(){        System.out.println("提交事务");    }    public void rollback(Throwable ex){        System.out.println("回滚事务");        System.out.println("发生的异常通知是:"+ex);    }    public void closeConnection(){        System.out.println("关闭连接");    }    public Object around(ProceedingJoinPoint pjp){        Object value = null ;         try{            begin();            value = pjp.proceed();            commit();        }catch(Throwable e) {            rollback(e);        }finally{            closeConnection();        }        return value;    }}

xml配置:

1.4、aop的注解配置

xml的配置

java配置

package cn.org.kingdom.ts;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;@Component("ts")@Aspectpublic class Transaction {    @Pointcut(value="execution(* cn.org.kingdom.service..*.*(..))")    public void pointcut(){}    //注意value为方法名,并且加括号    @Around(value="pointcut()")    public Object around(ProceedingJoinPoint pjp){        Object value = null ;         try{            begin();            value = pjp.proceed();            commit();        }catch(Throwable e) {            rollback(e);        }finally{            closeConnection();        }        return value;    }    public void begin(){        System.out.println("开启事务");    }    public void commit(){        System.out.println("提交事务");    }    public void rollback(Throwable ex){        System.out.println("回滚事务");        System.out.println("发生的异常通知是:"+ex);    }    public void closeConnection(){        System.out.println("关闭连接");    }}

转载于:https://blog.51cto.com/11230344/2287947

你可能感兴趣的文章
hive中文乱码问题
查看>>
hive写入数据的四种方式
查看>>
Python 连接 Mysql 操作异常
查看>>
linux 菜鸟人门命令
查看>>
XCode快捷键
查看>>
JAVA获取word表格中数据的方案
查看>>
Find 75000万像素和诺基亚的不是一个概念
查看>>
mysql处理添加外键时 error 150 问题
查看>>
企业如何针对用户数据进行有效保护
查看>>
Tomcat启动时报 java.lang.OutOfMemoryError: Java heap space
查看>>
Active Directory 基础回顾 (三)FSMO迁徙方式小总结
查看>>
Shell Script不同运行方式的区别
查看>>
Linux系统基本网络配置之ifconfig命令
查看>>
看几大IT公司的JSON利器
查看>>
Cocos2d-x 物理场景简单搭建
查看>>
认识“JPG、TXT”格式的病毒
查看>>
redhat6.2配置本地yum源
查看>>
RabbitMQ(四)
查看>>
IBM System x3850 X5如何级联
查看>>
php 类,对象,继承,接口,抽象
查看>>