使用注解方式进行aop编程(代码)
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编程(代码)相关推荐
- 使用XML方式进行AOP编程(代码)
UserDao.java接口: package com.liu.jdk;public interface UserDao {public void addUser();public void dele ...
- 第五章 Spring进阶-注解方式实现AOP(1)
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 徒弟:师傅,我 ...
- (转)使用Spring的注解方式实现AOP入门
http://blog.csdn.net/yerenyuan_pku/article/details/52865330 首先在Eclipse中新建一个普通的Java Project,名称为spring ...
- (转)使用Spring的注解方式实现AOP的细节
http://blog.csdn.net/yerenyuan_pku/article/details/52879669 前面我们已经入门使用Spring的注解方式实现AOP了,现在我们再来学习使用Sp ...
- Spring5学习(七):注解方式进行AOP操作 及 多种通知类型的测试
先来介绍一下AOP操作中的几个术语: 1.连接点:指类里面可以被增强的方法 2.切入点:指实际被增强的方法 3.通知:指实际增强的逻辑部分 4.切面:把通知应用到切入点的过程 Spring框架一般都是 ...
- springboot注解方式实现aop及常规方式
本文介绍springboot实现aop的两种方式 首先需要引入对应依赖: <dependency><groupId>org.springframework.boot</g ...
- spring学习--基于注解方式创建对象AOP
概念 下面四个注解功能是一样的,都可以用来创建 bean 实例 (1)@Component (2)@Service (3)@Controller (4)@Repository 1.引入 ...
- (转)Spring使用AspectJ进行AOP的开发:注解方式
http://blog.csdn.net/yerenyuan_pku/article/details/69790950 Spring使用AspectJ进行AOP的开发:注解方式 之前我已讲过Sprin ...
- spring框架:简述AOP的使用(xml方式和注解方式)
本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教. AOP概述 AOP的概念: AOP,全称Apect Oriented Programming,译为面向切面编程,简单的说它可以帮我们把程序 ...
最新文章
- DeeCamp 2020启动,邀请全球AI菁英共克世界变局下真实难题!
- Failed to initialize NSS library
- linux中offsetof与container_of宏定义
- FFmpeg音频编码 ---- pcm转aac(使用新版ffmpeg API,亲测可用)
- 计算机专硕没有宿舍,没有补贴,不提供宿舍,读研究生还要家里支持,应届生读非全太难...
- [小程序]微信小程序登陆并获取用户信息
- python不同曲线设置标签_【图像分类】基于Pascal VOC2012增强数据的多标签图像分类实战...
- LGP4173残缺的字符串
- php派车系统,公务用车管理系统
- 巴特沃斯(Butterworth)滤波器(一)
- vue中使用loadsh实现防抖功能及处理各种数据
- 机器学习笔记 - EfficientNet论文解读
- 前端实现模糊查询不区分大小写
- android 出生日期设置,android-选择出生日期对话框
- Anaconda3 从navigator面板无法启动
- 基于FPGA的ALU计算器verilog实现
- 砖家变异速度比病毒快
- 2022年数维杯国际赛ABCD题思路
- 逼死强迫症的腾讯网迷你新闻弹窗
- 三年级连接计算机教案广西,广西科教小学信息技术三年级教案培.doc
热门文章
- 月饼怎么吃才不胖,数据分析师教你选月饼
- 23名“无名氏”流浪者成长沙县新市民
- java raster_Raster
- Auto Lisp 标注子样式_FAIR 开放大规模细粒度词汇级标记数据集 LVIS,连披萨里的菠萝粒都能完整标注...
- linux 杂项设备,Linux下自动创建节点的字符杂项设备 misc_register
- CTF(pwn) Fastbin Attack
- python教程:实现延时回调普通函数的方法
- 【Python学习教程】:装饰器的详细教程,通俗易懂
- 一道问题引出的python中可变数据类型与不可变数据类型
- python爬虫:做一个界面爬虫小软件