Spring学习笔记:面向切面编程AOP(Aspect Oriented Programming)
一、面向切面编程AOP
目标:让我们可以“专心做事”,避免繁杂重复的功能编码
原理:将复杂的需求分解出不同方面,将公共功能集中解决
*****所谓面向切面编程,是一种通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态添加功能的技术。
二、AOP相关术语
1.增强处理(Advice)
前置增强,后置增强,环绕增强、异常抛出增强、最终增强等。。。
2.切入点(Pointcut)
3.连接点(Join Point)
4.切面(Aspect)
5.目标对象(Target Object)
6.AOP代理(AOP proxy)
7.织入(Weaving)
三、使用Spring AOP实现日至输出
1.在项目中添加Spring AOP的jar文件
2.编写前置增强和后置增强实现日志功能
package aop; import java.util.Arrays; import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint; /**
*
* @author TengYiCheng
*
*/
public class UserServiceLogger {
private static final Logger logger = Logger.getLogger(UserServiceLogger.class);
/**
* 代表前置增强的方法
* @param jp
*/
public void before(JoinPoint jp){
logger.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法。方法入参:"+Arrays.toString(jp.getArgs()));
}
/**
* 代表后置增强的方法
* @param jp
* @param result
*/
public void afterReturning(JoinPoint jp,Object result){
logger.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法。方法返回值:"+result);
}
}
3.编写Spring配置文件,对业务方法进行增强
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 声明组件 -->
<bean id="dao" class="dao.impl.UserInfoDaoImpl"></bean>
<bean id="service" class="service.impl.UserServiceImpl">
<property name="dao" ref="dao"></property>
</bean>
<bean id="theLogger" class="aop.UserServiceLogger"></bean>
<!-- AOP定义切入点 -->
<aop:config>
<!-- 定义一个切入点表达式 -->
<aop:pointcut id="pointcut" expression="execution(public int addUser(entity.UserInfo))"/>
<!-- 引用包含增强方法的Bean -->
<aop:aspect ref="theLogger">
<!-- 配置前置增强方法 -->
<aop:before method="before" pointcut-ref="pointcut"/>
<!-- 配置后置增强方法 -->
<aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result"/>
</aop:aspect>
</aop:config>
</beans>
4.编写代码获取带有增强处理的业务对象
package test; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import entity.UserInfo;
import service.IUserService; /**
*
* @author TengYiCheng
*
*/
public class AOPLoggerTest {
@Test
public void aopTest(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
IUserService service = (IUserService) context.getBean("service");
UserInfo user = new UserInfo();
user.setId(10010);
user.setUserName("Test");
user.setUserPassword("123456");
user.setPhone("13201069939");
service.addUser(user);
}
}
Spring学习笔记:面向切面编程AOP(Aspect Oriented Programming)的更多相关文章
- Java 面向切面编程(Aspect Oriented Programming,AOP)
本文内容 实例 引入 原始方法 装饰者模式 JDK 动态代理和 cglib 代理 直接使用 AOP 框架--AspectWerkz 最近跳槽了,新公司使用了 AOP 相关的技术,于是查点资料,复习一下 ...
- Spring学习笔记--面向切面编程(AOP)
什么是AOP AOP(Aspect Oriented Programming),意为面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的 ...
- Spring学习笔记-面向切面(AOP)-04
什么是面向切面编程 先大概了解一下部分术语 横切关注点:软件开发中,散布于多出的功能称为横切关注点(cross-cutting concern),简单的可以描述为可以影响应用多处的功能,比如日志.安全 ...
- spring学习 八 面向切面编程(AOP)概述
注:本文大部分参考 --------------------- 本文来自 -望远- 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yanquan345/artic ...
- Spring框架系列(4) - 深入浅出Spring核心之面向切面编程(AOP)
在Spring基础 - Spring简单例子引入Spring的核心中向你展示了AOP的基础含义,同时以此发散了一些AOP相关知识点; 本节将在此基础上进一步解读AOP的含义以及AOP的使用方式.@pd ...
- Spring中的面向切面编程(AOP)简介
一.什么是AOP AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面 ...
- 程序员笔记|Spring IoC、面向切面编程、事务管理等Spring基本概念详解
一.Spring IoC 1.1 重要概念 1)控制反转(Inversion of control) 控制反转是一种通过描述(在java中通过xml或者注解)并通过第三方去产生或获取特定对象的方式. ...
- Spring框架学习笔记(2)——面向切面编程AOP
介绍 概念 面向切面编程AOP与面向对象编程OOP有所不同,AOP不是对OOP的替换,而是对OOP的一种补充,AOP增强了OOP. 假设我们有几个业务代码,都调用了某个方法,按照OOP的思想,我们就会 ...
- Spring学习手札(二)面向切面编程AOP
AOP理解 Aspect Oriented Program面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 但是,这种说法有些片面,因为在软件工程中,AOP的价值体现的并 ...
随机推荐
- 标题title出现不规则背景
Html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- MySQL开启日志记录查询/执行过的SQL语句
作为后端开发者,遇到数据库问题的时候应该通过分析SQL语句来跟进问题所在,该方法可以记录所有的查询/执行的SQL语句到日志文件. 方法有几种,但是个人觉得以下这种最简单,但是重启MySQL服务后需要重 ...
- “全栈2019”Java第七十三章:外部类里多个静态非静态内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- [ActionSprit 3.0] FMS安装与测试
1.运行Flash Media Server4.5.exe,安装选项可全默认,序列号可不填:输入用户名和密码需记住,登录时要用. 2.安装完成,在安装目录C:\Program Files\Adobe\ ...
- UIView-frame-VS-bounds
分享链接
- ubuntu->桌面版-常用设置
1.目前使用unity桌面 ,使用Gnome,未来将会采用 Qt/QML 语言写的桌面 2.汉化 系统: 在 设置(setting)->语言支持(language support)->选择 ...
- Linux基本结构
Linux 的基本目录结构: 基本介绍: Linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后再次目录下载创建其他的目录. 经典的一句话:linu ...
- 3、激活层(Activiation Layers)及参数
caffe激活层(Activiation Layers) 在激活层中,对输入数据进行激活操作(实际上就是一种函数变换),是逐元素进行运算的.从bottom得到一个blob数据输入,运算后,从top输入 ...
- java面向对象之封装性
面向对象的特征之一:封装和隐藏: 一.问题的引入: 当创建一个类的对象以后,可以通过“对象.属性”的方式,对对象的属性进行赋值.这里,赋值操作要受属性的数据类型和存储范围的制约.除此之外,没有其他制约 ...
- 主流服务器虚拟化技术简单使用——Hyper-V(二)
当在多台Windows Server上部署了hyper-v的时候,需要采用合适的方法管理这些hyper-v节点. 远程桌面 最简单的方法就是逐台远程桌面登陆Windows Server,再使用每台本地 ...