UserDao.java接口:

package com.liu.jdk;public interface UserDao {public void addUser();public void deleteUser();}

UserDaoImpl.java实现类/目标类:

package com.liu.jdk;import org.springframework.stereotype.Repository;//目标类
@Repository("userDao")
public class UserDaoImpl implements UserDao {@Overridepublic void addUser() {// TODO Auto-generated method stubSystem.out.println("添加方法");int i  = 1/0;}@Overridepublic void deleteUser() {// TODO Auto-generated method stubSystem.out.println("删除方法");}}

MyAspect.java切面类:

package com.liu.aspect.annotation;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

//切面类
@Aspect
@Component
public class MyAspect {
@Pointcut(“execution(* com.liu.jdk..(…))”)
//需要一个返回值为void 方法体为空的方法来命名切入点
private void myPointCut() {}

//前置通知
@Before("myPointCut()")
public void before(JoinPoint joinPoint) {System.out.println("前置通知开始,模拟检查权限 ");System.out.println("目标类:"+joinPoint.getTarget());System.out.println("目标方法为:"+joinPoint.getSignature().getName());
}
//后置通知
@AfterReturning("myPointCut()")
public void afterRunning(JoinPoint joinPoint) {System.out.println("后置通知开始,模拟记录日志");System.out.println("目标方法为:"+joinPoint.getSignature().getName());
}//环绕通知
@Around("myPointCut()")
public Object around(ProceedingJoinPoint proceedingJoinPoint)throws Throwable {System.out.println("环绕通知开始");Object obj = proceedingJoinPoint.proceed();System.out.println("环绕通知结束");return obj;
}//异常通知
@AfterThrowing(value = "myPointCut()",throwing = "e")
public void afterThrowing(JoinPoint joinPoint,Throwable e) {System.out.println("异常通知,原因在于:"+e.getMessage());
}//最终通知
@After("myPointCut()")
public void after() {System.out.println("最终通知");
}

}

ApplicationContext.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.3.xsd "><!-- 指定需要扫描的包   开启注解--><context:component-scan base-package="com.liu"></context:component-scan><!-- 启动基于注解的声明式AspectJ支持 --><aop:aspectj-autoproxy />
</beans>

Test测试类:

package com.liu.aspect.annotation;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.liu.jdk.UserDao;public class Test {public static void main(String[] args) {String xmlpath = "com/liu/aspect/annotation/ApplicationContext.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlpath);UserDao userDao = (UserDao) applicationContext.getBean("userDao");userDao.addUser();}}

运行结果:

环绕通知开始
前置通知开始,模拟检查权限
目标类:com.liu.jdk.UserDaoImpl@5158b42f
目标方法为:addUser
添加方法
最终通知
异常通知,原因在于:/ by zero

使用注解方式进行aop编程(代码)相关推荐

  1. 使用XML方式进行AOP编程(代码)

    UserDao.java接口: package com.liu.jdk;public interface UserDao {public void addUser();public void dele ...

  2. 第五章 Spring进阶-注解方式实现AOP(1)

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 徒弟:师傅,我 ...

  3. (转)使用Spring的注解方式实现AOP入门

    http://blog.csdn.net/yerenyuan_pku/article/details/52865330 首先在Eclipse中新建一个普通的Java Project,名称为spring ...

  4. (转)使用Spring的注解方式实现AOP的细节

    http://blog.csdn.net/yerenyuan_pku/article/details/52879669 前面我们已经入门使用Spring的注解方式实现AOP了,现在我们再来学习使用Sp ...

  5. Spring5学习(七):注解方式进行AOP操作 及 多种通知类型的测试

    先来介绍一下AOP操作中的几个术语: 1.连接点:指类里面可以被增强的方法 2.切入点:指实际被增强的方法 3.通知:指实际增强的逻辑部分 4.切面:把通知应用到切入点的过程 Spring框架一般都是 ...

  6. springboot注解方式实现aop及常规方式

    本文介绍springboot实现aop的两种方式 首先需要引入对应依赖: <dependency><groupId>org.springframework.boot</g ...

  7. spring学习--基于注解方式创建对象AOP

    概念 下面四个注解功能是一样的,都可以用来创建 bean 实例 ​ (1)@Component ​ (2)@Service ​ (3)@Controller ​ (4)@Repository 1.引入 ...

  8. (转)Spring使用AspectJ进行AOP的开发:注解方式

    http://blog.csdn.net/yerenyuan_pku/article/details/69790950 Spring使用AspectJ进行AOP的开发:注解方式 之前我已讲过Sprin ...

  9. spring框架:简述AOP的使用(xml方式和注解方式)

    本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教. AOP概述 AOP的概念: AOP,全称Apect Oriented Programming,译为面向切面编程,简单的说它可以帮我们把程序 ...

最新文章

  1. DeeCamp 2020启动,邀请全球AI菁英共克世界变局下真实难题!
  2. Failed to initialize NSS library
  3. linux中offsetof与container_of宏定义
  4. FFmpeg音频编码 ---- pcm转aac(使用新版ffmpeg API,亲测可用)
  5. 计算机专硕没有宿舍,没有补贴,不提供宿舍,读研究生还要家里支持,应届生读非全太难...
  6. [小程序]微信小程序登陆并获取用户信息
  7. python不同曲线设置标签_【图像分类】基于Pascal VOC2012增强数据的多标签图像分类实战...
  8. LGP4173残缺的字符串
  9. php派车系统,公务用车管理系统
  10. 巴特沃斯(Butterworth)滤波器(一)
  11. vue中使用loadsh实现防抖功能及处理各种数据
  12. 机器学习笔记 - EfficientNet论文解读
  13. 前端实现模糊查询不区分大小写
  14. android 出生日期设置,android-选择出生日期对话框
  15. Anaconda3 从navigator面板无法启动
  16. 基于FPGA的ALU计算器verilog实现
  17. 砖家变异速度比病毒快
  18. 2022年数维杯国际赛ABCD题思路
  19. 逼死强迫症的腾讯网迷你新闻弹窗
  20. 三年级连接计算机教案广西,广西科教小学信息技术三年级教案培.doc

热门文章

  1. 月饼怎么吃才不胖,数据分析师教你选月饼
  2. 23名“无名氏”流浪者成长沙县新市民
  3. java raster_Raster
  4. Auto Lisp 标注子样式_FAIR 开放大规模细粒度词汇级标记数据集 LVIS,连披萨里的菠萝粒都能完整标注...
  5. linux 杂项设备,Linux下自动创建节点的字符杂项设备 misc_register
  6. CTF(pwn) Fastbin Attack
  7. python教程:实现延时回调普通函数的方法
  8. 【Python学习教程】:装饰器的详细教程,通俗易懂
  9. 一道问题引出的python中可变数据类型与不可变数据类型
  10. python爬虫:做一个界面爬虫小软件