设计模式(五) 注解方式实现AOP
1.1、
Aop, aspect object programming 面向切面编程
功能: 让关注点代码与业务代码分离!
关注点,
重复代码就叫做关注点;
切面,
关注点形成的类,就叫切面(类)!
面向切面编程,就是指 对很多功能都有的重复的代码抽取,再在运行的时候往业务方法上动态植入“切面类代码”。
切入点,
执行目标对象方法,动态植入切面代码。
可以通过切入点表达式,指定拦截哪些类的哪些方法; 给指定的类在运行的时候植入切面类代码。
代码示例如下:
UserDao 目标对象
package com.murong.aop;import org.springframework.stereotype.Component;/*** 目标对象*/ @Component // 加入IOC容器 public class UserDao {public void save(){System.out.println("-----核心业务:保存!!!------");} }
Aop 切面类
package com.murong.aop;import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component;/***切面类*/ @Component // 加入IOC容器 @Aspect public class Aop {@Pointcut("execution(* com.murong.aop.UserDao.*(..))")//切入点public void testPointCut(){}@Before("testPointCut()")public void begin(){System.out.println("事务开启123");}//关注点代码 @After("testPointCut()")public void end(){System.out.println("事务结束456");}//关注点代码 }
ApplicationContext sping配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"default-autowire="byType"><!-- 开启注解扫描 --><context:component-scan base-package="com.murong.aop"></context:component-scan><!--开启注解扫描--><aop:aspectj-autoproxy></aop:aspectj-autoproxy></beans>
App 测试类
package com.murong.aop;import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {private ApplicationContext ac = new ClassPathXmlApplicationContext("com/murong/aop/applicationContext");@Testpublic void test(){UserDao dao = (UserDao) ac.getBean("userDao");dao.save();} }
使用总结:
步骤:
1) 先引入aop相关jar文件 (aspectj aop优秀组件)
spring-aop-3.2.5.RELEASE.jar 【以spring3.2版本jar为例】
aopalliance.jar 【spring2.5源码/lib/aopalliance】
aspectjweaver.jar 【spring2.5源码/lib/aspectj】或【aspectj-1.8.2\lib】
aspectjrt.jar 【spring2.5源码/lib/aspectj】或【aspectj-1.8.2\lib】
注意: 用到spring2.5版本的jar文件,如果用jdk1.7可能会有问题。
需要升级aspectj组件,即使用aspectj-1.8.2版本中提供jar文件提供。
2) bean.xml中引入aop名称空间(文件头引入)
3) 开启aop注解
如上图。
4) 使用注解
@Aspect 指定一个类为切面类
@Pointcut("execution(* cn.itcast.e_aop_anno.*.*(..))") 指定切入点表达式
@Before("pointCut_()") 前置通知: 目标方法之前执行
@After("pointCut_()") 后置通知:目标方法之后执行(始终执行)
@AfterReturning("pointCut_()") 返回后通知: 执行方法结束前执行(异常不执行)
@AfterThrowing("pointCut_()") 异常通知: 出现异常时候执行
@Around("pointCut_()") 环绕通知: 环绕目标方法执行
转载于:https://www.cnblogs.com/yuanchaoyong/p/6416512.html
设计模式(五) 注解方式实现AOP相关推荐
- 第五章 Spring进阶-注解方式实现AOP(1)
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 徒弟:师傅,我 ...
- (转)使用Spring的注解方式实现AOP的细节
http://blog.csdn.net/yerenyuan_pku/article/details/52879669 前面我们已经入门使用Spring的注解方式实现AOP了,现在我们再来学习使用Sp ...
- (转)使用Spring的注解方式实现AOP入门
http://blog.csdn.net/yerenyuan_pku/article/details/52865330 首先在Eclipse中新建一个普通的Java Project,名称为spring ...
- Spring5学习(七):注解方式进行AOP操作 及 多种通知类型的测试
先来介绍一下AOP操作中的几个术语: 1.连接点:指类里面可以被增强的方法 2.切入点:指实际被增强的方法 3.通知:指实际增强的逻辑部分 4.切面:把通知应用到切入点的过程 Spring框架一般都是 ...
- springboot注解方式实现aop及常规方式
本文介绍springboot实现aop的两种方式 首先需要引入对应依赖: <dependency><groupId>org.springframework.boot</g ...
- 使用注解方式进行aop编程(代码)
UserDao.java接口: package com.liu.jdk;public interface UserDao {public void addUser();public void dele ...
- spring学习--基于注解方式创建对象AOP
概念 下面四个注解功能是一样的,都可以用来创建 bean 实例 (1)@Component (2)@Service (3)@Controller (4)@Repository 1.引入 ...
- spring框架:简述AOP的使用(xml方式和注解方式)
本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教. AOP概述 AOP的概念: AOP,全称Apect Oriented Programming,译为面向切面编程,简单的说它可以帮我们把程序 ...
- (转)Spring使用AspectJ进行AOP的开发:注解方式
http://blog.csdn.net/yerenyuan_pku/article/details/69790950 Spring使用AspectJ进行AOP的开发:注解方式 之前我已讲过Sprin ...
- AOP——基于AspectJ的注解来实现AOP操作
1.使用注解方式实现AOP操作 第一步:创建对象 <!-- 创建对象 --> <bean id="book" class="com.bjxb.aop.B ...
最新文章
- 生成树计数Matrix-Tree定理-数学
- 软件测试集成测试广度,软件测试的规范[6]
- java青蛙青蛙跳井_速解青蛙跳井问题
- 只读字符串的c语言命令,C语言只读空间 - C 语言程序设计
- 蓝桥杯2016省赛真题-剪邮票(dfs)
- 刘强东说过,如果京东失败99%是我个人造成,这话会灵验吗?
- Python 列表list与数组array的区别
- python内置对象是什么_#【Python】【基础知识】【内置对象常用方法】
- 开源 三层模型_开源模型将如何超越其他模型
- SQLServer left join 出现比左表多的数据
- 这款老不死的笔记本,产品小姐姐的最爱......
- cimiss数据_CIMISS数据下载小助手
- python中怎样使用re模块_python如何导入re模块
- docx文档文字怎么加边框_Word技巧:怎么给文本加方框
- postgresql 客户端 uri 设置时区
- 红米note9pro刷鸿蒙,红米Note10Pro:正式说你好,红米Note9Pro:彻底说再见!
- 优化 | 线性化:0-1变量乘以连续变量的线性化
- 2022-2028年全球与中国细菌生物农药行业市场深度调研及投资预测分析
- 店盈通:拼多多商品怎么上架?
- pyqt5 图像上划线_PyQt5如何用QPainter在QScrollArea上画线?