spring - AOP 基础(一)

简介:

spring AOP 

spring支持四种拦截类型:目标方法调用前,目标方法调用后,目标方法调用前后,方法抛出异常。


spring Aop采用动态代理的方式生成代理类,前面分析过动态代理和静态代理以及区别,可以点击我的博客。

一些术语解释。


连接点:

程序的某个位置,就是程序也就是类里的方法,一个类可以有多个方法,多个连接点,就是在这些方法前后异常等做文章。


切点:

可能会和连接点混淆,类里有多个连接点,那么程序或者项目执行的时候如何找到对应的连接点?切点就是做这个工作的,

切点帮你定位到对应的连接点,然后执行那四种拦截,进行增强。


增强:

切点定位到具体的连接点,定位到了,我们需要对其做点什么,不能就定位到了那里就完事吧。增加就是对目标类的连接点也就是方法

执行一段逻辑。


目标对象:

被一个或者多个切面所通知的对象。


织入:

织入就是把增强类加入到目标类的里的具体连接点上,Aop有三种织入方式,编译器织入,装载器织入,动态代理织入。

切面:由增强和切点组成,横切关注点。


Spring 对AOP的支持,目前比较流行的两种方式,一是spring 本身支持AOP的方式,二是就是比较流行的框架Aspectj。


先来说说spring本身对AOP的支持。


异常通知拦截,为什么先说这个,因为这个ThrowsAdvice接口里面什么都没有,不像AfterAdvice,MethodBeforeAdvice,MethodInterceptor

这几种方式,有方法实现。


异常抛出通知:


package com.lw.rpc.test;


import java.lang.reflect.Method;


import net.sf.cglib.reflect.FastClass;

import net.sf.cglib.reflect.FastMethod;


import org.springframework.aop.ThrowsAdvice;

import org.springframework.aop.framework.ProxyFactory;


/**

 * ThrowsAdvice 异常统计拦截

 * 

 * @author

 *

 */

public class SpringAopAdvice implements ThrowsAdvice {

/**

 * 对未知异常的处理.

 */

public void afterThrowing(Method method, Object[] args, Object target, NumberFormatException ex) throws Throwable {

System.out.println("出现异常的类: " + target.getClass().getName());

System.out.println("出现异常的方法: " + method.getName());


System.out.println(" 具体什么异常 : " + ex.getClass().getName());

}


public static void main(String[] args) {

SpringAopBean bean = new SpringAopBean();


ProxyFactory pf = new ProxyFactory();

pf.setTarget(bean);

pf.addAdvice(new SpringAopAdvice());


SpringAopBean proxy = (SpringAopBean) pf.getProxy();


try {

// 测试

proxy.aopMethod1("spring");

} catch (Exception e) {

e.printStackTrace();

}

}

}


目标类:

package com.lw.rpc.test;


public class SpringAopBean {


public void aopMethod() throws NullPointerException {

System.out.println("空指针异常");

}

public int aopMethod1(String numStr) throws NumberFormatException {

int num = Integer.parseInt(numStr);

return num;

}

}


其他的几种方式,实现AfterAdvice,MethodBeforeAdvice,MethodInterceptor这三个接口就可以实现。



本文转自 豆芽菜橙 51CTO博客,原文链接:http://blog.51cto.com/shangdc/1916507



相关文章
|
2月前
|
Java
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
这篇文章是Spring5框架的实战教程,深入讲解了AOP的基本概念、如何利用动态代理实现AOP,特别是通过JDK动态代理机制在不修改源代码的情况下为业务逻辑添加新功能,降低代码耦合度,并通过具体代码示例演示了JDK动态代理的实现过程。
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
|
18天前
|
设计模式 Java 测试技术
spring复习04,静态代理动态代理,AOP
这篇文章讲解了Java代理模式的相关知识,包括静态代理和动态代理(JDK动态代理和CGLIB),以及AOP(面向切面编程)的概念和在Spring框架中的应用。文章还提供了详细的示例代码,演示了如何使用Spring AOP进行方法增强和代理对象的创建。
spring复习04,静态代理动态代理,AOP
|
1天前
|
Java 编译器 Spring
Spring AOP 和 AspectJ 的区别
Spring AOP和AspectJ AOP都是面向切面编程(AOP)的实现,但它们在实现方式、灵活性、依赖性、性能和使用场景等方面存在显著区别。‌
14 2
|
3月前
|
Java Spring
在Spring Boot中使用AOP实现日志切面
在Spring Boot中使用AOP实现日志切面
|
9天前
|
Java Spring 容器
Spring IOC、AOP与事务管理底层原理及源码解析
【10月更文挑战第1天】Spring框架以其强大的控制反转(IOC)和面向切面编程(AOP)功能,成为Java企业级开发中的首选框架。本文将深入探讨Spring IOC和AOP的底层原理,并通过源码解析来揭示其实现机制。同时,我们还将探讨Spring事务管理的核心原理,并给出相应的源码示例。
45 9
|
1天前
|
XML Java 数据格式
Spring的IOC和AOP
Spring的IOC和AOP
11 0
|
1月前
|
Java 数据库连接 数据库
Spring基础3——AOP,事务管理
AOP简介、入门案例、工作流程、切入点表达式、环绕通知、通知获取参数或返回值或异常、事务管理
Spring基础3——AOP,事务管理
|
2月前
|
XML Java 数据格式
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
|
2月前
|
缓存 Java 开发者
Spring高手之路22——AOP切面类的封装与解析
本篇文章深入解析了Spring AOP的工作机制,包括Advisor和TargetSource的构建与作用。通过详尽的源码分析和实际案例,帮助开发者全面理解AOP的核心技术,提升在实际项目中的应用能力。
30 0
Spring高手之路22——AOP切面类的封装与解析
|
2月前
|
安全 Java 开发者
Java 新手入门:Spring 两大利器IoC 和 AOP,小白也能轻松理解!
Java 新手入门:Spring 两大利器IoC 和 AOP,小白也能轻松理解!
33 1