AOP代理机制模式有两种:分为静态机制和动态机制
1、代理是基于接口的,那么首先建一个接口类IHello
package com.zuxia.test;
public interface IHello {
/**
* 假设这是一个业务方法
* @param name
*/
void sayHello(String name);
}
2、该类实现了IHello接口
package com.zuxia.test;
public class Hello implements IHello {
public void sayHello(String name) {
System.out.println("Hello :" + name);
}
}
3、编写一个代理对象的类HelloHandler,必须实现InvocationHandler接口
package com.zuxia.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 动态代理实现类(AOP是面向方面编程而OOP是面向对象编程)
* @author LeiZhongQiang
* 创建时间:2010/6/20
* @version 1.0
*
*/
public class HelloHandler implements InvocationHandler {
//声明目标对象
private Object objOriginal;
//通过构造方法,传入目标对象
public HelloHandler(Object obj) {
this.objOriginal = obj ;
}
/**
* 根据传入的目标对象,返回一个代理对象
* Method:是在运行期间,JDK动态获得的目标对象的Method
* args:动态获取的目标对象方法中的参数
*
*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result;
System.out.println("before");
//反射调用目标对象的方法,调用完毕之后可能有返回值,所以要接受返回值
result = method.invoke(this.objOriginal ,args);
System.out.println("after");
return result;
}
}
4、编写一个main函数测试方法Test
package com.zuxia.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
IHello hello = new Hello();
InvocationHandler handler = new HelloHandler(hello);
//第一个参数:指定产生代理对象的ClassLoader,需要将这个ClassLoader指定为和目标对象和同一个ClassLoader
//第二个参数:代理对象要实现和目标对象一样的接口,所以只需要拿到目标对象实现的即可即可
//第三个参数:表明这些被拦截的方法执行时需要执行哪个InvocationHandler的invoke方法
IHello helloProxy = (IHello)Proxy.newProxyInstance(hello.getClass().getClassLoader(),hello.getClass().getInterfaces(),handler);
helloProxy.sayHello("lei");
}
}
注:动态代理与普通的代理好处,最大的好处是接口中声明的所有方法都被转移到一个集中的方法处理(invoke),这样,在接口方法数量比较多的时候,我们可以进行灵活的处理,而不需要像静态代理那样每一个方法进行中转。
分享到:
相关推荐
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和解耦的编程方式,使得我们可以在不修改业务代码的情况下,添加日志、事务管理、安全控制等功能。本教程将深入探讨Spring AOP的概念、...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和解耦的编程方式,使得开发者可以将关注点分离到不同的切面中,而不是混杂在业务逻辑代码里。本测试项目旨在帮助理解并实践Spring AOP的...
在"SpringAOP测试Demo"中,我们通常会涉及以下几个核心概念和操作: 1. **切面(Aspect)**:切面是关注点的一个模块化,它包括了连接点、通知、目标对象、织入和引入。在Spring AOP中,切面通常由一个或多个注解的...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个重要组成部分。它是对传统面向对象编程(OOP)的一种补充,旨在解决业务逻辑中的横切关注点,如日志记录、事务管理、权限控制等。...
在IT行业中,Spring AOP(面向切面编程)是一种强大的工具,它允许我们在不修改代码的情况下,对应用程序的特定部分进行拦截和增强。这在性能监控、日志记录、事务管理等方面尤为有用。本篇文章将深入探讨如何使用...
在这个"SpringAOP的例子"中,我们将深入探讨如何在Eclipse环境下利用Spring AOP和动态代理来实现这些功能。 首先,让我们理解什么是AOP。AOP是一种编程范式,旨在减少代码的重复性和增强可维护性。在传统的OOP中,...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个重要组成部分。它提供了一种模块化和声明式的方式来处理系统中的交叉关注点,如日志、性能监控、安全性、事务管理等。通过AOP,...
Spring AOP,全称为Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它为Java应用程序提供了声明式的企业级服务,如事务管理、日志记录等。AOP的核心概念是切面(Aspect)和通知(Advice...
在IT行业中,Spring AOP(面向切面编程)是一种强大的工具,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强。本实例将详细探讨如何通过注解(Annotation)来实现Spring AOP的方法拦截。 一、Spring...
标题“Spring Aop demo”指的是一个关于Spring框架的面向切面编程(Aspect Oriented Programming,简称AOP)的示例项目。在Spring框架中,AOP用于处理系统中的横切关注点,比如日志记录、事务管理、权限验证等,这些...
Spring AOP,即Spring的面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改原有代码的情况下,对程序进行功能增强的技术。在实际开发中,我们经常使用AOP来处理如日志记录、事务管理、权限校验...
1. **Spring Core**:提供了Spring框架的基础,包括依赖注入(DI)和面向切面编程(AOP)的基础支持。它是所有其他模块的基础。 2. **Spring AOP**:支持面向切面编程,允许开发者定义方法拦截器和切入点,从而分离...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许开发者定义“切面”来封装系统中的交叉关注点,如日志、事务管理、安全性等,从而提高代码的可复用性和可维护性。在Spring AOP中,切面是对应用程序中...
在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱,其中AOP(面向切面编程)是其核心特性之一。AOP允许开发者将关注点从主业务逻辑中分离出来,如日志记录、事务管理等,实现代码的模块化和可复用性...
【标题】"spring-aop.rar_java aop_spring aop" 涉及的主要知识点是Spring框架中的面向切面编程(AOP)以及Java基础知识。这个压缩包可能包含了一个简单的Spring AOP应用示例,同时也涵盖了Java的一些核心概念,如...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从核心业务逻辑中分离出来,例如日志记录、事务管理等。本教程将通过模拟Spring AOP来阐述如何实现一个简单的切面编程。我们将讨论...
在Java开发中,Spring框架因其强大的功能和灵活性而被广泛应用,其中Spring AOP(面向切面编程)是它的重要特性之一。AOP允许程序员将关注点从核心业务逻辑中分离出来,比如日志记录、事务管理等,这些被称为“切面...
AOP (Aspect Oriented Programming) 面向切面编程,是一种软件开发思想,它允许开发者将那些分散在整个应用各处的“切面”(如日志记录、安全控制、事务管理等)从业务逻辑中分离出来,并将这些关注点以模块化的方式...