动态代理作用:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
这里实例的实现主要是通过java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来实现的,Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现。
代码如下:
package com.ruixingsoft;
/**
* 租房接口
*
* @author ledefe
*
*/
public interface Rent {
/**
* 前往查看房子
*/
public void View();
}
package com.ruixingsoft;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 房屋中介
*
* @author ledefe
*
*/
public class RentHandler implements InvocationHandler {
private Object rentObj;
public RentHandler(Object obj) {
this.rentObj = obj;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("中介:房屋信息已发布!");
method.invoke(rentObj, args);
System.out.println("中介:客户已接待完!");
return null;
}
}
package com.ruixingsoft;
/**
* A客户-租房
*
* @author ledefe
*
*/
public class ARentImpl implements Rent {
public void View() {
System.out.println("A前往查看房子!");
}
}
package com.ruixingsoft;
import java.lang.reflect.Proxy;
public class RentTest {
/**
* 动态代理测试
*
* @param args
*/
public static void main(String[] args) {
// xx的代理接口:A客户
Rent rent = new ARentImpl();
// xx的代理实现类:房屋中介
RentHandler handler = new RentHandler(rent);
// 实例化一个xx接口的代理
Rent proxy = (Rent) Proxy.newProxyInstance(rent.getClass().getClassLoader(), rent.getClass().getInterfaces(), handler);
proxy.View();
}
}
测试结果:
- 中介:房屋信息已发布!
- A前往查看房子!
- 中介:客户已接待完!
分享到:
相关推荐
动态代理(Aspect-Oriented Programming,AOP)是面向切面编程的一种编程范式,它主要用来解决传统面向对象编程中难以处理的横切关注...这个例子对于初学者来说是一个很好的实践,有助于深入理解AOP和动态代理的概念。
下面是如何使用Java动态代理实现AOP的一个简化的步骤: 1. **定义业务接口**:例如`BusinessInterface`,它包含了需要进行操作的方法,如`processBusiness()`。 2. **实现业务逻辑**:`BusinessObject`类实现了`...
现在,我们来看如何创建一个简单的Spring AOP例子: 1. **定义切面(Aspect)**:切面是包含通知(Advice)和切入点(Pointcut)的类。通知定义了要执行的逻辑,切入点定义了何时执行。例如,我们可以创建一个名为`...
例如,我们可以创建一个`AuthorizationAspect`类,它有一个`@Before`注解的方法,该方法会在目标方法执行前进行权限检查。 ```java import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang....
Java动态代理是Java提供的一种在运行时创建代理对象的技术,主要由`java.lang.reflect.Proxy`类和`java.lang....通过理解和实践这个简单的实例,你可以进一步探索如何在实际项目中应用动态代理,以实现更复杂的功能。
这个示例可能包括了一个简单的业务服务类、一个切面类以及相关的测试类。通过分析这些文件,我们可以更深入地理解如何在实际项目中应用Spring AOP。 总结来说,Spring AOP提供了一种优雅的方式,让我们能够将横切...
Java原生代理(Java Native Interface...虽然Java原生代理在功能上比专门的AOP框架如Spring AOP有限,但它对于理解AOP原理和实践是一个很好的起点。在实际开发中,根据项目需求和性能考虑,可以选择合适的方式实现AOP。
另一个文件"testaop"是一个MyEclipse项目,包含了实际的Spring AOP应用实例。这个项目可以帮助你更好地理解如何在实际项目中集成和使用Spring AOP。你可以直接导入此项目到MyEclipse中,运行并观察AOP如何工作,例如...
通过以上知识,我们可以创建一个简单的Spring AOP实例,例如创建一个日志切面,记录每个服务方法的执行时间: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* ...
源码中可能包含了一个简单的Spring Boot项目,其中包含了AOP切面的实现。`.classpath`和`.project`文件是Eclipse项目的元数据,用于项目构建和设置;`src`目录包含了源代码,可能有切面类和业务逻辑;`lib`目录可能...
这个方法需要三个参数:一个类加载器、一个接口数组和一个InvocationHandler实例。InvocationHandler是动态代理的核心,它定义了方法调用的处理逻辑。 4. **InvocationHandler接口** - `InvocationHandler`接口...
在Spring AOP中,一个切面通常由一个或多个通知(advises)和一个切点(join point)定义组成。 2. **通知(Advice)**:通知是在特定连接点执行的代码块,例如前置通知(before)、后置通知(after)、环绕通知...
在Java中,Spring框架是最著名的AOP实现之一,但这里我们讨论的是一个简易的AOP框架,它可以帮助理解AOP的基本概念和工作原理。 该简易AOP框架包含以下几个关键组件: 1. **配置文件**:这是定义切面(aspect)和...
在这个实例中,我们看到了如何在Spring 3.2.8中使用AOP进行简单的日志记录。这只是AOP功能的冰山一角,实际上,你可以通过切面来处理更复杂的场景,如事务管理、性能监控、安全控制等。切记,合理地使用AOP可以极大...
6. **AOP实战**: 包含一个简单的日志记录例子,展示了如何在方法调用前后添加日志输出,以及在出现异常时进行处理。 通过这个学习实例,你可以动手实践,理解Spring AOP的工作原理,并学习如何将其应用于实际项目中...
2. **Spring AOP简介**:讲解Spring框架如何提供AOP支持,包括基于代理的AOP(JDK动态代理和CGLIB代理)和基于注解的AOP。 3. **创建切面**:演示如何定义一个切面类,该类包含通知方法,这些方法将在特定的连接点...
以下是一个简单的Spring AOP入门实例步骤: 1. 首先,定义一个切面类,包含通知方法。例如,一个简单的日志切面: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example*...
本例子是一个关于如何在Spring框架中实现AOP的应用实例。 标题中的"aop例子aop例子"表明我们将探讨Spring AOP的实践应用。Spring是Java领域中最流行的框架之一,它提供了对AOP的强大支持,使得我们可以方便地创建和...
在这个“手写简单实现ioc、aop事务demo”中,我们将探讨如何通过工厂模式和动态代理来实现这些概念。 首先,让我们了解IOC的核心思想。在传统的编程中,对象创建和管理的控制权在程序员手中,而IOC则是将这种控制权...