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 ...
随机推荐
- Servlet 学习(六)
会话 1.定义 一般意义会话:指两人以上的对话(多用于学习别种语言或方言时) 计算机中的会话:客户端和服务器的通讯 web客户端 A ------>Tomcat web客户端 B ------& ...
- 《SQL 进阶教程》 查找局部不一致的数据
-- 从下面这张商品表里找出价格相等的商品的组合 select * from products p1LEFT JOIN products p2on p1.price = p2.price and p1 ...
- 02.Scala高级特性:第6节 高阶函数;第7节 隐式转换和隐式参数
Scala高级特性 1. 课程目标 1.1. 目标一:深入理解高阶函数 1.2. 目标二:深入理解隐式转换 2. 高阶函数 2.1. 概念 Scala混合了面向对象和函数式的特 ...
- Ubuntu18.04-MySQL8.0-表名大小写敏感-远程连接
1.卸载 停止服务 sudo service mysql stop 删除mysql服务 sudo apt-get remove mysql-server 删除其他组件 sudo apt-get aut ...
- 31 反射方式给类的属性赋值 和 对象赋值(clone)
1.配置类 package com.da.tool.util.configuration.reflect; /** */ public class JobInfo { private String j ...
- redis集群配置文件
bind xxx.xxx.xxx.xxx 绑定redis服务器网卡IP,默认为127.,即本地回环地址.这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接.如果bind选项为空的 ...
- JavaScript数组用法
本文介绍一些js数组的用法: 上图的要点为: 1.unshift增加数组头部的元素,shift删除数组头部的元素. 2.delete除可删除对象的属性外,还可以删除数组的元素,使其占位变为undefi ...
- 中山普及Day13——普及
又是迷之自信的说...估的230,考的50整,我欲上天呐!!! T1:深渊(怕不是黑暗种族聚集地???) 思路:动归.而且是简单动归.转移方程:Fi,j=max(Fi-1,j,Fi,j,Fi-1,(j ...
- 【快学springboot】1.快速创建springboot项目
若图片查看异常,请前往掘金查看:https://juejin.im/post/5d00e793f265da1b614ff10b 使用spring initialize工具快速创建springboot项 ...
- JuJu Beta Postmortem
JuJu demo demo 项目github地址 JuJu 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 完成基于Julia语言的NER mod ...