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 ...
随机推荐
- 让 el-dialog 居中,并且内容多的时候内部可以滚动
.el-dialog { position: absolute; top: 50%; left: 50%; margin: 0 !important; transform: translate(-50 ...
- mysql操作之密码的那点小事
mysql 修改密码的2种方式: 进入mysql库的user表中修改 update mysql.user password = password("新密码") where 条件; ...
- ubuntu---CUDA 安装注意点总结
安装CUDA前的基础准备: 1.查看内核.gcc版本并记住. 最好 禁止内核更新,以防止以后工作中意外的系统更新使内核自动更新了,与驱动版本不兼容了. 2.禁用 nouveau驱动. 3.多下 ...
- httpclient post 请求
package com.thinkgem.jeesite.common.utils; import org.apache.http.HttpEntity; import org.apache.http ...
- ARM CORTEX-M3 内核架构理解归纳
ARM CORTEX-M3 内核架构理解归纳 来源:网络 个人觉得对CM3架构归纳的非常不错,因此转载 基于<ARM-CORTEX M3 权威指南>做学习总结: 在我看来,Cotex-M3 ...
- 创建私有yum仓库
创建私有yum仓库
- Maven项目-端口被占用java.net.BindException: Address already in use: JVM_Bind <null>:8080解决方法
异常显示: 问题所在:之前启动的tomcat未停止,端口被占用. 解决方法: 养成良好的习惯,用完之后停掉服务.
- html弹出框播放视频
<a data-toggle="modal" data-target=".bs-example-modal-lg">模态框</a> &l ...
- python 通过UDP传输文件
使用一个简单的python脚本将一个本地文件以码流的形式,通过UDP协议发送到对端: import socket import os import stat import struct MAX_P ...
- postman提交文件
说明 1.Headers中添加 Content-Type multipart/form-data 2.Body 中选择form-data 并添加 需要传的参数名和值 最后新的一行选择file ...