Spring的AOP开发(基于ApsectJ的注解)
创建项目,导包
编写目标类并配置
创建OrderDao
package com.rick.aop.demo1;
public class OrderDao {
public void save() {
System.out.println("保存订单。。。。");
}
public void update() {
System.out.println("修改订单。。。。");
}
public void delete() {
System.out.println("删除订单。。。。");
}
public void find() {
System.out.println("查询订单。。。。");
}
}
配置文件
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 配置目标类 -->
<bean id = "orderDao" class = "com.rick.aop.demo1.OrderDao"></bean>
</beans>
编写切面类并配置
创建MyAspectAnno类
package com.rick.aop.demo1;
/*
* 注解方式的切面类
*/
public class MyAspectAnno {
public void before() {
System.out.println("前置增强====");
}
}
配置文件
<!-- 配置切面类 -->
<bean id = "myAspect" class = "com.rick.aop.demo1.MyAspectAnno"></bean>
使用注解的AOP对象目标类进行增强
在配置文件中打开注解的AOP开发
<!-- 打开注解的AOP开发 -->
<aop:aspectj-autoproxy/>
在切面类上使用注解(修改MyAspectAnno 类)
由此类可见注解的方式开发快速,但是后期维护需要修改源代码!
package com.rick.aop.demo1;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
/*
* 注解方式的切面类
*/
@Aspect
public class MyAspectAnno {
@Before(value="execution(* com.rick.aop.demo1.OrderDao.save(..))")
public void before() {
System.out.println("前置增强====");
}
}
编写测试类
导入 spring-test jar包
package com.rick.aop.demo1;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/*
* 测试类
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestDemo {
@Resource(name = "orderDao")
private OrderDao orderDao;
@Test
public void demo1() {
orderDao.save();
orderDao.update();
orderDao.delete();
orderDao.find();
}
}
其他通知:
package com.rick.aop.demo1;
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;
/*
* 注解方式的切面类
*/
@Aspect
public class MyAspectAnno {
// 前置增强
@Before(value = "execution(* com.rick.aop.demo1.OrderDao.save(..))")
public void before() {
System.out.println("前置增强====");
}
// 后置增强
@AfterReturning("execution(* com.rick.aop.demo1.OrderDao.delete(..))")
public void afterReturning() { // 后置还可以获得方法返回值,上一篇基于XML方式的文章已经说明此处不再赘述
System.out.println("后置增强====");
}
// 环绕通知
@Around("execution(* com.rick.aop.demo1.OrderDao.update(..))")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("环绕增强前====");
Object object = joinPoint.proceed();
System.out.println("环绕增强后====");
return object;
}
// 异常抛出通知
@AfterThrowing(value = "execution(* com.rick.aop.demo1.OrderDao.find(..))", throwing = "e")
public void afterThrowing(Throwable e) {
System.out.println("异常抛出增强====" + e.getMessage());
}
// 最终通知
@After(value = "execution(* com.rick.aop.demo1.OrderDao.find(..))")
public void after() {
System.out.println("最终增强====");
}
}
测试
Spring的注解的AOP的切入点的配置
修改MyAspectAnno类
Spring的AOP开发(基于ApsectJ的注解)的更多相关文章
- 十四 Spring的AOP的基于AspectJ的注解开发
Spring的AOP的基于AspectJ的注解开发 创建项目,引入jar包 编写目标类.切面类 配置目标类.切面类 在注解文件里开启AOP的开发 <?xml version="1.0& ...
- Spring的AOP开发入门,Spring整合Junit单元测试(基于ASpectJ的XML方式)
参考自 https://www.cnblogs.com/ltfxy/p/9882430.html 创建web项目,引入jar包 除了基本的6个Spring开发的jar包外,还要引入aop开发相关的四个 ...
- Spring的AOP开发(基于AspectJ的XML方式)
Spring的AOP的简介: AOP思想最早是由AOP联盟组织提出的.Spring是使用这种思想最好的框架 Spring的AOP有自己实现的方式(非常繁琐). Aspect是一个AOP的框架, Spr ...
- day39-Spring 08-Spring的AOP:基于AspectJ的注解
基于AspectJ的注解的开发要重点掌握. 这些表达式肯定要应用在我们的某些个增强上. 学习AspectJ也是两种形式:一种是XML,一种是注解.AspectJ的增强,就是那些通知的类型.Aspect ...
- Spring的AOP开发的相关术语
转载自 https://www.cnblogs.com/ltfxy/p/9873618.html SpringAOP简介: AOP思想最早是由AOP联盟组织提出的.Spring使用这种思想最好的框架. ...
- 十一 Spring的AOP开发的相关术语
SpringAOP简介: AOP思想最早是由AOP联盟组织提出的.Spring使用这种思想最好的框架. Spring的AOP有自己实现的方式,但是非常繁琐.AspectJ是一个AOP框架,Spring ...
- 【学习】Spring 的 AOP :基于Annotation 的“零配置”方式
转自:http://www.cnblogs.com/jbelial/archive/2012/07/20/2539123.html AOP(Aspect Orient Programming ) , ...
- Spring中AOP的基于xml开发和配置
pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...
- Spring -07 -AOP [面向切面编程] - 使用注解@+ AspectJ 方式实现环绕/前/后等通知 -超简洁 --静态代理/动态代理{JDK/cglib}
1.spring 不会自动去寻找注解,必须告诉 spring 哪些包下的类中可能有注解;使用注解来取代配置文件.1.1 引入xmlns:context ,指定扫描范围 <context:comp ...
随机推荐
- day1-2基本数据类型
/*5种基本数据类型 1,Undefined var a; a = undefined Undefined派生自Null 2,Null(本质属于object,单独细分出来的) var a = null ...
- 计算机网络历史与基本概念&分层与参考模型(TCP/IP与OSI)&通信过程
Definition: 计算机网络:使用单一技术相互连接的自主计算机的互联集合. 单台计算机独立自主(不受制于其他计算机),连接介质可以使光纤.铜线也可以是微波.红外.卫星. 互联网络(Interne ...
- swoole 父子进程间通信
<?php /** * 场景: * 监控订单表状态 父子进程通信 * 一个主进程 两个子进程实现 */ //设置主进程名 echo '主进程id:' . posix_getpid() . PHP ...
- tensorflow非线性回归(03-1)
这个程序为简单的三层结构组成:输入层.中间层.输出层 要理清各层间变量个数 import numpy as np import matplotlib.pyplot as plt import tens ...
- DuiLib中FlashDemo的例子经验杂粹1
转载:https://www.jianshu.com/p/3e958ae9e5ab 最近用duilib做个东西,经常卡壳 ,而且以前学的现在又忘.现在觉得应该好好做笔记,以前老是觉得博客是很郑重的东西 ...
- 设计模式课程 设计模式精讲 2-2 UML类图讲解
1 类图讲解 1 类图讲解 + 公共方法 - private权限 # protected权限 包内和包外继承的子类都能引用 ~ default权限(包权限)只有包内能引用 下划线 静态 Stati ...
- 利用kali自带的msfvenom工具生成远程控制软件(木马)
2.生成一个简单的木马 3. 4. 5. 6.接下来生成的winx64muma.exe实际演示 7.将生成的winx64muma.exe在受害者机器上运行 8.在kali下输入msfconsole 9 ...
- Windows XP 常用DOS命令
winver 检查Windows版本 wmimgmt.msc 打开windows管理体系结构(WMI) wupdmgr windows更新程序 wscript windows脚本宿主设置 writ ...
- vb.net自学完整版
https://m.book118.com/html/2016/1203/67671992.shtm
- Linux和云供应商Red Hat被IBM以34亿美元的价格收购
导读 今天的主题包括IBM以340亿美元收购Red Hat,人性化是使人工智能成功的关键.两家公司于10月28日宣布,IBM正以340亿美元的价格收购Linux和云技术供应商Red Hat,以期改变云 ...