上一节演示的是静态代理模式,本节演示的是静态代理模式,既然是动态,那么就不存在UserManagerImplProxy类。
使用动态代理我们需要声明一个类SecurityHandler,这个类要实现InvocationHandler接口。
在类中定义一个产生动态代理的方法newProxy();同时把我们验证的代码放到这个类中。通过SecurityHandler,当我们调用方法时默认会调用SecurityHandler类invoke方法,我们在这个方法中进行安全性检查,检查通过后在调用真实的方法。需要注意的是目标对象接口中的部分方法是存在返回值的。
package com.szy.spring;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class SecurityHandler implements InvocationHandler
{
private Object targetObject;
public Object newProxy(Object targetObject)
{
this.targetObject=targetObject;
//返回动态代理
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(),
this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
checkSecurity();
Object ret=null;
try
{
//调用目标对象的真实方法
ret=method.invoke(this.targetObject, args);
//ret接受存在的返回值,不存在返回值则为Null
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
public void checkSecurity()
{
System.out.println("--------UserManagerImpl.checkSecurity()----------");
}
}
使用这种方式维护起来相对比较好,我想进行安全性检查就进行,不想就不进行,很方便。
下面进行客户端调用
package com.szy.spring;
public class Client
{
public static void main(String[] args)
{
SecurityHandler handler=new SecurityHandler();
//创建代理对象
UserManager userManager=(UserManager)handler.newProxy(new UserManagerImpl());
userManager.addUser("coolszy", "kuka");
}
}
分享到:
相关推荐
在本篇Spring学习笔记中,我们将探讨静态代理模式在Spring框架中的应用与分析。静态代理是一种常见的设计模式,它在不修改目标类代码的情况下,通过代理类来扩展或增强目标类的功能。在Spring中,静态代理主要应用于...
标题 "spring学习笔记(3.20)" 暗示我们即将探讨的是关于Spring框架的某个特定主题,可能涵盖版本3.20或基于该版本的学习内容。Spring是一个广泛使用的Java企业级应用开发框架,它提供了依赖注入、AOP(面向切面编程...
Spring源码分析,web源码分析,Tomcat架构源码分析都是非常深入的源码级课程,期待研究设计模式和深入学习源码内功的朋友们,一定要仔细的学习研究。 (0);目录中文件数:1个 ├─3.代码.zip (1)\1.笔记;目录中文...
### 传智播客 Spring 完全文档 笔记总结 #### 一、Spring入门 ##### 1.1 Spring简介 - **定义**:Spring 是一个开源的控制反转(Inversion of Control, IoC)和面向切面(Aspect Oriented Programming, AOP)的...
通过分析和运行这些代码,你将能更好地理解Spring的IoC和DI机制,并且能够将这些知识应用到自己的项目中。 总之,控制反转和依赖注入是Spring框架的关键特性,它们帮助开发者编写更加灵活、可维护和可测试的代码。...
通过学习笔记中对于这些工具的讲解和案例分析,学习者可以学会如何高效地构建质量高的软件。 在数据库操作方面,笔记详细介绍了JDBC的使用以及ORM框架如Hibernate或MyBatis的知识。这些内容对于希望进行后端开发的...
PPT通常会通过图表和案例演示MVC的工作原理和实际应用,而学习笔记则可能包含实践过程中遇到的问题及解决方案,是巩固理论知识和提升实战技能的好资源。 **七、应用实例** 通过分析和实践MVC模式的应用实例,你...
### Apache ActiveMQ 学习笔记 #### 一、ActiveMQ简介与安装 ##### 1.1 ActiveMQ概述 Apache ActiveMQ 是一个完全支持 JMS 1.1 和 J2EE 1.4 规范的消息服务器。它适用于 Java 消息服务 (JMS),并且是一个开源项目...
"课堂笔记_2016+spring_PH_campus+culture_week5_in-class+learning1" 的主题聚焦于中外大学校园文化的对比,特别是关注了在课堂内的学习方式。这个话题包括了多种教学模式,如研讨会、讲座、小组工作、演示、...
在"maven学习笔记"中,我们可以深入学习如何配置POM.xml文件,理解Maven的生命周期和构建过程。 **Spring MVC**是Spring框架的一个模块,专门用于处理Web应用的请求-响应模型。它采用模型-视图-控制器(MVC)设计...
【Java学习笔记】 Java是一种广泛使用的面向对象的编程语言,以其“一次编写,到处运行”的特性而闻名。学习Java不仅需要理解基本语法,如类、对象、接口、继承、多态等,还需要掌握异常处理、集合框架、IO流、线程...
标题 "BDA2021Spring:大数据和业务分析2021年Spring" 暗示了这是一个关于大数据分析的课程或项目,可能在2021年的春季学期进行。这个主题涵盖了大数据处理的核心概念和技术,以及如何利用这些工具和方法进行业务分析...
这个文件很可能是为学习软件工程这门课程的学生准备的,包含了相关的课件、笔记、练习题或者项目代码等资源。 描述中的内容与标题相同,意味着我们没有更多的具体信息来深入解析这个压缩包的具体内容。通常,软件...
毕业设计,基于SpringBoot+Vue+MySQL开发的微服务在线教育系统,源码+数据库+论文答辩+毕业论文+视频演示 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了微服务...
2. **学习笔记**:这些笔记通常由有经验的开发者编写,总结了他们对DWR的理解和使用技巧,是快速学习DWR的好材料。笔记可能涵盖了DWR的基本概念,如RemoteObject、Ajax调用、Batching等,以及更高级的主题,如安全性...
1. `(jsp+ssm+mysql)校园二手市场笔记.doc`:这份文档可能包含了项目的详细开发过程,包括技术选型的原因、JSP和SSM框架的介绍、MySQL数据库的设计思路等,对于学习者来说是宝贵的参考资料。 2. **数据库文件**:...
- `springMVC-note-任亮.doc`可能是一个关于SpringMVC的文档,包含了详细的学习笔记或教程。 - `jquery-1.6.2.js`是jQuery库的一个旧版本,常用于处理DOM操作和AJAX请求,与SpringMVC配合可以增强用户体验。 - `...
这是一个关于使用SSM(Spring、SpringMVC、MyBatis)框架和JSP技术构建的母婴用品在线购物网站的毕业设计项目。这个项目不仅包含了完整的源代码,还提供了相关的教程和文档,对于学习和理解Web应用开发具有很高的...