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 ...
随机推荐
- async处理异步操作
async函数用async作为关键字,try和 catch来处理异常, await接受一个promise函数返回 async list () { try { await api.findjuBarDa ...
- Mybatis的三种批量操作数据的方法
方法1: 使用for循环在java代码中insert (不推荐) 方法2: 使用 在Mapper.xml当中使用 foreach循环的方式进行insert PersonDao.java文件 publi ...
- 吴裕雄--天生自然ORACLE数据库学习笔记:管理控制文件和日志文件
alter database add logfile ('D:\OracleFiles\LogFiles\REDO4_A.LOG', 'E:\OracleFiles\LogFiles\REDO4_B. ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:设定文本左对齐
<!DOCTYPE html> <html> <head> <title>菜鸟教程(runoob.com)</title> <meta ...
- Linux命令:yum命令
YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具 一.yum命令用法 yum repolist ...
- [经验] Linux 怎么连接 Xshell?
(1) 首先, 你要先有一个可以正常运行的 Linux 系统, 当然一般情况下我们是把这个系统放在虚拟机里的, 我所使用的是 ubuntu-18.04.2-live-server-amd64.iso ...
- QT5静态编译工程(arm交叉编译)
1.首先,QT编译环境默认是动态库,要编译静态程序是不可能的,所以要下载QT源码,重新编译QT编译环境 2.下载QT源码(5.13版本):http://download.qt.io/developme ...
- 通过Java读取xml文件内容
读取XML中的内容就需要对XML进行解析,目前对XML进行解析的方法分为四种: 下面解析的方法是DOM4J,需要下载jar包dom4j:https://dom4j.github.io/ package ...
- Django 学习之用户认证组件auth与User对象
一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个. 1 .authenticate() ...
- Centos7 nginx配置多虚拟主机过程
一.前提准备 1.已经安装好了的Centos7服务器 2.ip 为192.168.1.209 [本次的配置ip] 3.确定防火墙等已经关闭 二.nignx配置文件参数详解 要配置多台虚拟主机,就需 ...