模型类
User.java
package com.test.model; public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
接口
UserDAO.java
package com.test.dao; import com.test.model.User; public interface UserDAO { public void save(User user); }
实现接口类
UserDAOImpl.java
package com.test.dao.impl; import com.test.dao.UserDAO; import com.test.model.User; public class UserDAOImpl implements UserDAO { public void save(User user) { System.out.println("user saved!"); } }
拦截器
MyInterceptor.java
package com.test.interceptor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class MyInterceptor implements InvocationHandler { // 被代理对象 private Object target; public Object getTarget() { return target; } public void setTarget(Object target) { this.target = target; } public void beforeMethod(Method m) { System.out.println(m.getName() + " start!"); } @Override public Object invoke(Object proxy, Method m, Object[] args) throws Throwable { beforeMethod(m); // m方法被"被代理对象"调用 m.invoke(target, args); return null; } }
Junit测试类
UserServiceTest.java
package com.test.service; import java.lang.reflect.Proxy; import org.junit.Test; import com.test.dao.UserDAO; import com.test.dao.impl.UserDAOImpl; import com.test.interceptor.MyInterceptor; import com.test.model.User; public class UserServiceTest { @Test public void testProxy() { // 创建被代理对象 UserDAO userDAO = new UserDAOImpl(); // 创建拦截器对象 MyInterceptor myInterceptor = new MyInterceptor(); // 设置被代理对象 myInterceptor.setTarget(userDAO); // 产生代理对象 // 第一个参数:用哪个ClassLoader来产生代理对象 // 第二个参数:产生的代理对象实现了哪些接口,这里也可以用userDAO.getClass().getInterfaces() // 第三个参数:当产生这个代理对象后,调用它里面的方法时,用哪个Handler进行处理 UserDAO userDAOProxy = (UserDAO) Proxy.newProxyInstance(userDAO.getClass().getClassLoader(), new Class[] { UserDAO.class }, myInterceptor); System.out.println(userDAOProxy.getClass().getName());//打印的值:$Proxy4,说明它是一个代理对象 userDAOProxy.save(new User()); } }
执行测试方法后,打印:
$Proxy4
save start!
user saved!
相关推荐
在Spring框架中,面向切面编程(AOP)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。本篇文章将深入探讨如何使用Spring的动态代理机制实现AOP...
面向切面编程(AOP,Aspect Oriented Programming)是Spring框架的重要组成部分,它提供了一种在不修改原有业务代码的基础上,插入额外功能的编程模型。Spring AOP使得开发者能够更方便地实现如日志记录、事务管理、...
面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要特性,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、安全控制等。AOP的核心概念包括切面、通知、连接...
在Spring框架中,面向切面编程(AOP)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、性能监控等。本篇文章将深入探讨如何利用Spring的注解来实现AOP,以及其背后的动态...
### 面向切面编程(AOP) 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它旨在提高模块化程度,通过将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,使得代码更加清晰、...
面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种优雅的方式来处理系统的横切关注点,如日志、事务管理、性能监控和权限控制等。在Spring中,AOP主要通过代理模式实现,...
面向切面编程(AOP)是一种编程范式,它旨在减少代码中的重复部分,特别是那些与核心业务逻辑无关但又必须处理的交叉关注点,如日志、事务管理、安全控制等。Spring框架是Java领域中实现AOP的常用工具,它通过提供...
AOP面向切面编程.ppt
面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在将系统中的关注点分离,使得代码更加模块化,易于维护和扩展。在传统的面向对象编程(OOP)中,业务逻辑往往与日志、事务管理、权限控制等横...
### AOP面向切面编程详解 #### 一、AOP概览 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的...
面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。 除了类(classes)以外,AOP提供了 切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。
面向切面编程(AOP)是一种编程范式,它旨在将关注点分离,使得系统中的核心业务逻辑与系统服务(如日志、事务管理、权限控制等)可以解耦...实践AOP需要对面向切面编程的概念有清晰的理解,同时熟悉所选库的使用方式。
spect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的...
面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它旨在提高软件的模块化程度,通过将关注点分离到不同的“切面”中来实现。在.NET环境中,AOP通常通过拦截器(Interceptor)或动态代理...
面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在将关注点分离,使得业务逻辑和系统服务(如日志、事务管理、权限控制等)能够解耦。这种编程方式允许程序员定义“切面”,这些切面封装了特定...
在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...
在Spring框架中,动态代理和AOP(面向切面编程)是两个重要的概念,它们极大地增强了代码的可维护性和灵活性。下面将详细讲解这两个概念及其实际应用。 动态代理,是Spring提供的一种机制,允许我们在不修改原对象...
总的来说,面向切面编程AOP是一种强大的工具,用于管理横切关注点,它使我们能够编写更加模块化、可重用的代码,特别是在大型企业级应用中,如Web开发,它可以极大地提升代码质量和开发效率。通过合理使用AOP,我们...
面向切面编程(AOP,Aspect-Oriented Programming)是一种编程思想和技术,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中分离出来。本文将深入解析AOP的基本概念及其在JavaEE环境下的实现原理。 ...