第一步:导包

第二步:实现类和切面类

Service("userService")
public class IUserviceImpl implements IUserService{
private String name ;
@Override
public void add(User user) {

}

@Override
public void addUser() {
System.out.println("添加用户");
}

@Override
public void updateUser() {
System.out.println("更新用户");

}

@Override
public int deleteUser(int id) {
System.out.println("通过id删除用户");
return 1;
}

@Override
public void deleteUser() {
System.out.println("删除用户");
// int i = 10/0;

}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public void add() {
System.out.println("创建用户");

}
}
@Component //AOP底层
@Aspect
public class MyAspect {

@Before("execution(* com.zz.service.UserServiceImpl.*(..))")
public void myBefore(JoinPoint joinPoint){
System.out.println("1 前置通知..."+joinPoint.getSignature().getName());
}

public void myAfterReturning(){
System.out.println("4 后置通知...");
}

/* public Object myAround() throws Throwable {
return myAround();
}*/

public Object myAround( ProceedingJoinPoint pjp) throws Throwable {
System.out.println("2环绕通知...开启事务");
System.out.println(pjp.getSignature().getName());//切入点就方法名
//放行
Object retObj = pjp.proceed();
System.out.println("3提交事务...提交事务");
return retObj;
}

public void myAfterThrowing( JoinPoint jp,Throwable e) {
System.out.println("异常通知..." + jp.getSignature().getName() + "===" + e.getMessage());
}

public void myAfter(JoinPoint jp){

System.out.println("最终通知 ");

}

第三步:spring的xml配置

<!--  配置UserService-->
<bean id="userService" class="com.zz.service.UserServiceImpl"></bean>
<!-- 配置切面类对象-->
<bean id="myAspect" class="com.zz.aspect.MyAspect"></bean>

<aop:config >

<!-- 切入点:2
expression:表达式
每个service的方法前面都开启事务和结束事务

AOP:用于事务配置&日志记录
-->
<aop:aspect ref="myAspect"> //指定切面类位置
<aop:pointcut id="myPointcut" expression="execution(* com.zz.service.UserServiceImpl.*(..))"/> //指定切入点
<!-- 配置前置通知...-->
<aop:before method="myBefore" pointcut-ref="myPointcut" />
<!-- 配置后置通知...-->
<aop:after-returning method="myAfterReturning" pointcut-ref="myPointcut" />
<!-- 配置异常通知..throwing="e" 值,是方法的参数名.-->
<aop:after-throwing method="myAfterThrowing" pointcut-ref="myPointcut" throwing="e" />
<!--配置环绕通知-->
<aop:around method="myAround" pointcut-ref="myPointcut"></aop:around>
<!--配置最终通知-->
<aop:after method="myAfter" pointcut-ref="myPointcut"></aop:after>
</aop:aspect>
</aop:config>

第四步:测试

    
@Test
public void test()throws Exception{
  ApplicationContext applicationContext =new ClassPathXmlApplicationContext("Beans16.xml");

//从spring 容器获取userservice 对象
IUserService userService1= (IUserService) applicationContext.getBean("userService");

userService1.deleteUser();

}
}

AOP联盟规范

AOP实现

规范

aspectj实现

Spring AOP Aspect的简单实现(基于XML)的更多相关文章

  1. Spring AOP Aspect的简单实现(基于注解)

    第1步:声明使用注解 <!-- 配置扫描注解--> 扫描包的位置<context:component-scan base-package="com.zz"/> ...

  2. Spring声明式事务管理(基于XML方式实现)

    --------------------siwuxie095                             Spring 声明式事务管理(基于 XML 方式实现)         以转账为例 ...

  3. Spring AOP就是这么简单啦

    前言 只有光头才能变强 上一篇已经讲解了Spring IOC知识点一网打尽!,这篇主要是讲解Spring的AOP模块~ 之前我已经写过一篇关于AOP的文章了,那篇把比较重要的知识点都讲解过了一篇啦:S ...

  4. Spring系列(四):Spring AOP详解和实现方式(xml配置和注解配置)

    参考文章:http://www.cnblogs.com/hongwz/p/5764917.html 一.什么是AOP AOP(Aspect Oriented Programming),即面向切面编程, ...

  5. Spring AOP注解形式简单实现

    实现步骤: 1:导入类扫描的注解解析器 命名空间:xmlns:context="http://www.springframework.org/schema/context" xsi ...

  6. Spring(二十):Spring AOP(四):基于配置文件的方式来配置 AOP

    基于配置文件的方式来配置 AOP 前边三个章节<Spring(十七):Spring AOP(一):简介>.<Spring(十八):Spring AOP(二):通知(前置.后置.返回. ...

  7. Spring 之定义切面尝试(基于 XML)

    有些场景下只能基于 XML 来定义切面. [Spring 之定义切面尝试] 1.XML 下定义切面(首先是要有一个对应的类...显然要比基于注解的麻烦) <?xml version=" ...

  8. Spring AOP(aspect oriented programming) 转载

    1.面向切面的基本原理 软件系统可以看成是由一组关注点组成的,其中,直接的业务关注点,是直切关注点.而为直切关注点提供服务的,就是横切关注点. 01.什么是面向切面编程 横切关注点:影响应用多处的功能 ...

  9. Spring Boot -- Spring AOP原理及简单实现

    一.AOP基本概念 什么是AOP,AOP英语全名就是Aspect oriented programming,字面意思就是面向切面编程.面向切面的编程是对面向对象编程的补充,面向对象的编程核心模块是类, ...

随机推荐

  1. 使用Magicodes.IE快速导出Excel

    前言 总是有很多朋友咨询Magicodes.IE如何基于ASP.NET Core导出Excel,出于从框架的体验和易用性的角度,决定对Excel的导出进行独立封装,以便于大家更易于使用,开箱即用. 注 ...

  2. vue 快速入门 系列 —— vue-cli 上

    其他章节请看: vue 快速入门 系列 Vue CLI 4.x 上 在 vue loader 一文中我们已经学会从零搭建一个简单的,用于单文件组件开发的脚手架:本篇,我们将全面学习 vue-cli 这 ...

  3. postman之断言

    1 (状态码断言)和(返回内容断言)

  4. Spring Boot 入门系列(二十二)使用Swagger2构建 RESTful API文档

    前面介绍了如何Spring Boot 快速打造Restful API 接口,也介绍了如何优雅的实现 Api 版本控制,不清楚的可以看我之前的文章:https://www.cnblogs.com/zha ...

  5. 线程状态Thread.State

    线程状态Thread.State 线程状态.线程可以处于下列状态之一: NEW 至今尚未启动的线程处于这种状态. RUNNABLE 正在 Java 虚拟机中执行的线程处于这种状态. BLOCKED 受 ...

  6. Numpy数组的组合与分割详解

    在介绍数组的组合和分割前,我们需要先了解数组的维(ndim)和轴(axis)概念. 如果数组的元素是数组,即数组嵌套数组,我们就称其为多维数组.几层嵌套就称几维.比如形状为(a,b)的二维数组就可以看 ...

  7. 跟我一起写 Makefile(五)

    六.多目标 Makefile的规则中的目标可以不止一个,其支持多目标,有可能我们的多个目标同时依赖于一个文件,并且其生成的命令大体类似.于是我们就能把其合并起来.当然,多个目标的生成规则的执行命令是同 ...

  8. 为VIM添加Python扩展

    VIM的自带的脚本功能很强,但只能用在VIM自己上,如果让它支持Python脚本,那简直就无敌了,这个想法当然不是我想出来的,应该说英雄所见略同,于是乎vim7.2就内建了对python2.4的支持, ...

  9. Linux之cat tail less常见用法

    1.cat 通常查找出错误日志 cat error.log | grep 'foo' , 这时候我们还有个需求就是输出当前这个日志的前后几行: cat error.log | grep -C 10 ' ...

  10. Solon 1.5.24 发布

    本次版本主要变化: 修复 solon.extend.sessionstate.jwt 在特定场景下会无限次解析的问题 优化 solon.extend.cors 对头信息的处理 插件 solon.boo ...