| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Java练习(十):Spring应用之AOP(简单工程示例) -> 正文阅读 |
|
[Java知识库]Java练习(十):Spring应用之AOP(简单工程示例) |
目录 1. 背景概念1.1 定义AOP (Aspect Orient Programming), 直译过来就是?面向切面编程。 AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。 1.2 AOP的本质AOP的本质就是动态代理。Spring提供了面向切面编程的丰富支持,是通过动态代理实现的。 即:我们的初始class,经过动态代理,生成了新的class,这些class里织入测advice(方法) advice 就是模板模式 1.3 AOP的实现因为利用了AOP的框架,我们实现了某些接口的时候,当系统调用了这些方法的时候(因为有接口的限制,所以系统能够试时的决定调用哪个方法),我们这些方法自然就会被实现,不需要我们来管。 第一步需要在配置文件中,注入我们的类(bean) 1.4?各个名称的概念详解横切关注点:跨越应用程序多个模块的方法或功能。即是与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志 , 安全 , 缓存 , 事务等等 .... 切面(ASPECT):横切关注点被模块化的特殊对象。即,它是一个类。 通知(Advice):AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。它是类中的一个方法。 通知(Advice):是切面的一种实现,可以完成简单织入功能(织入功能就是在这里完成的)。 Spring AOP 中有 5 中通知类型,分别如下(关系图略,但很重要): @Before:通知方法会在目标方法调用之前执行 @After:通知方法会在目标方法返回或异常后调用 @AfterReturning:通知方法会在目标方法返回后调用 @AfterThrowing:通知方法会在目标方法抛出异常后调用 @Around:通知方法会将目标方法封装起来 目标(Target):被通知对象。 代理(Proxy):向目标对象应用通知之后创建的对象。 连接点(JointPoint):表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,连接点总是方法的调用。 切入点(PointCut):可以插入增强处理的连接点。 引入(Introduction):引入允许我们向现有的类添加新的方法或者属性。 织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的对象,这个过程就是织入。 2. 示例工程2.1 maven的配置文件: pom.xml注意这里AOP需要依赖:org.aspectj <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 2.2 bean配置文件: bean_aop.xml<?xml version="1.0" encoding="UTF-8"?> ? ?<!--aop的配置--> 2.3 接口和类的代码2.3.1 接口:UserServicepackage com.my.test; public interface UserService { 2.3.2?实现接口的类:UserServiceImplpackage com.my.test; public class UserServiceImpl implements UserService{ ?? ?public void add() { 2.3.3?Before类:BeforeLogpackage com.my.test; import java.lang.reflect.Method; //注意这里继承的接口MethodBeforeAdvice, AOP框架所有 public class BeforeLog implements MethodBeforeAdvice{ ?? ?//method : 要执行的目标对象的方法 2.3.4?After类:AfterLogpackage com.my.test; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; //注意这里继承的接口AfterReturningAdvice, AOP框架所有 public class AfterLog implements AfterReturningAdvice{ ?? ?//returnValue 返回值 2.4 测试类?package com.my.test.demo; import org.springframework.context.ApplicationContext; public class SpringAOPDemoTest { ?? ?public static void main(String[] args) { 输出结果: com.my.test.UserServiceImpl的search方法准备执行了 结果解析: 可以看到,每个方法的前后,都被织入了before和after类中的信息。 这个思想用在获取多个程序运行日志的操作上,很有用。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 17:11:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |