`
coolszy
  • 浏览: 1412424 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring学习笔记(13)----动态代理模式分析演示

阅读更多

上一节演示的是静态代理模式,本节演示的是静态代理模式,既然是动态,那么就不存在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学习笔记(12)----静态代理模式分析演示

    在本篇Spring学习笔记中,我们将探讨静态代理模式在Spring框架中的应用与分析。静态代理是一种常见的设计模式,它在不修改目标类代码的情况下,通过代理类来扩展或增强目标类的功能。在Spring中,静态代理主要应用于...

    spring学习笔记(3.20)

    标题 "spring学习笔记(3.20)" 暗示我们即将探讨的是关于Spring框架的某个特定主题,可能涵盖版本3.20或基于该版本的学习内容。Spring是一个广泛使用的Java企业级应用开发框架,它提供了依赖注入、AOP(面向切面编程...

    最新设计模式超级详解+Tomcat架构源码分析+Spring源码分析 资深级设计模型课程

    Spring源码分析,web源码分析,Tomcat架构源码分析都是非常深入的源码级课程,期待研究设计模式和深入学习源码内功的朋友们,一定要仔细的学习研究。 (0);目录中文件数:1个 ├─3.代码.zip (1)\1.笔记;目录中文...

    传智播客 Spring 完全文档 笔记总结

    ### 传智播客 Spring 完全文档 笔记总结 #### 一、Spring入门 ##### 1.1 Spring简介 - **定义**:Spring 是一个开源的控制反转(Inversion of Control, IoC)和面向切面(Aspect Oriented Programming, AOP)的...

    我的Pro Spring 学习笔记 之二 控制反转(IoC)和依赖注入(DI), Spring初步

    通过分析和运行这些代码,你将能更好地理解Spring的IoC和DI机制,并且能够将这些知识应用到自己的项目中。 总之,控制反转和依赖注入是Spring框架的关键特性,它们帮助开发者编写更加灵活、可维护和可测试的代码。...

    j2EE-MVC设计模式(内附ppt讲解,学习笔记和应用实例)

    PPT通常会通过图表和案例演示MVC的工作原理和实际应用,而学习笔记则可能包含实践过程中遇到的问题及解决方案,是巩固理论知识和提升实战技能的好资源。 **七、应用实例** 通过分析和实践MVC模式的应用实例,你...

    Apache ActiveMQ学习笔记【原创:mq的方式有两种:点到点和发布/订阅】

    ### 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

    "课堂笔记_2016+spring_PH_campus+culture_week5_in-class+learning1" 的主题聚焦于中外大学校园文化的对比,特别是关注了在课堂内的学习方式。这个话题包括了多种教学模式,如研讨会、讲座、小组工作、演示、...

    maven-聚合项目-springMVC

    在"maven学习笔记"中,我们可以深入学习如何配置POM.xml文件,理解Maven的生命周期和构建过程。 **Spring MVC**是Spring框架的一个模块,专门用于处理Web应用的请求-响应模型。它采用模型-视图-控制器(MVC)设计...

    java学习笔记,光盘,经典案例,源代码,酒店的实例

    【Java学习笔记】 Java是一种广泛使用的面向对象的编程语言,以其“一次编写,到处运行”的特性而闻名。学习Java不仅需要理解基本语法,如类、对象、接口、继承、多态等,还需要掌握异常处理、集合框架、IO流、线程...

    BDA2021Spring:大数据和业务分析2021年Spring

    标题 "BDA2021Spring:大数据和业务分析2021年Spring" 暗示了这是一个关于大数据分析的课程或项目,可能在2021年的春季学期进行。这个主题涵盖了大数据处理的核心概念和技术,以及如何利用这些工具和方法进行业务分析...

    1806030325-软件工程18-3班-周业博.rar

    这个文件很可能是为学习软件工程这门课程的学生准备的,包含了相关的课件、笔记、练习题或者项目代码等资源。 描述中的内容与标题相同,意味着我们没有更多的具体信息来深入解析这个压缩包的具体内容。通常,软件...

    毕业设计,基于SpringBoot+Vue+MySQL开发的微服务在线教育系统,源码+数据库+论文答辩+毕业论文+视频演示

    毕业设计,基于SpringBoot+Vue+MySQL开发的微服务在线教育系统,源码+数据库+论文答辩+毕业论文+视频演示 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了微服务...

    DWR综合资料与JAR包

    2. **学习笔记**:这些笔记通常由有经验的开发者编写,总结了他们对DWR的理解和使用技巧,是快速学习DWR的好材料。笔记可能涵盖了DWR的基本概念,如RemoteObject、Ajax调用、Batching等,以及更高级的主题,如安全性...

    实现的校园二手市场交易(jsp,ssm,mysql).zip

    1. `(jsp+ssm+mysql)校园二手市场笔记.doc`:这份文档可能包含了项目的详细开发过程,包括技术选型的原因、JSP和SSM框架的介绍、MySQL数据库的设计思路等,对于学习者来说是宝贵的参考资料。 2. **数据库文件**:...

    SpingMVC&JDBC

    - `springMVC-note-任亮.doc`可能是一个关于SpringMVC的文档,包含了详细的学习笔记或教程。 - `jquery-1.6.2.js`是jQuery库的一个旧版本,常用于处理DOM操作和AJAX请求,与SpringMVC配合可以增强用户体验。 - `...

    基于ssm+jsp的母婴用品网站+数据库(毕业设计,包括源码,教程).zip

    这是一个关于使用SSM(Spring、SpringMVC、MyBatis)框架和JSP技术构建的母婴用品在线购物网站的毕业设计项目。这个项目不仅包含了完整的源代码,还提供了相关的教程和文档,对于学习和理解Web应用开发具有很高的...

    jsp147在线博客网ssh+mysql.zip

    【标题】"jsp147在线博客网ssh+mysql.zip"是一个包含源代码的压缩包,主要用于演示基于Java技术栈的SSH(Struts2、Spring、Hibernate)框架与MySQL数据库结合构建的在线博客系统。SSH是Java Web开发中常用的一个集成...

Global site tag (gtag.js) - Google Analytics