`
x125521853
  • 浏览: 72718 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

第六章 JDK代理模式

阅读更多

一:Spring中的AOP技术实际上就是Struts2中的拦截器,只不过针对的对象不同,
     Spring中的AOP技术: 拦截业务层的方法
     Struts2中的拦截器: 拦截Action中的请求

二:示例:模拟一个业务需求

   //service层   

package com.spring.chapter6.service;

public interface UserService {
	public void create();
	public void update();
	public void delete();
}

   //service.impl实现类  

package com.spring.chapter6.service.impl;

import com.spring.chapter6.service.UserService;

public class UserServiceImpl implements UserService {
	private String user;
	
	public UserServiceImpl() {
		super();
	}

	public UserServiceImpl(String user) {
		super();
		this.user = user;
	}

	public void create() {
		System.out.println("create方法被调用");
	}

	public void delete() {
		System.out.println("delete方法被调用");
	}

	public void update() {
		System.out.println("update方法被调用");
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}	
}

     (1).可以看到服务层实现类中有一个持有User对象,我们现在的要求是如果用户为null,则没有权限调用create,update,delete这些方法,如果不为空则可以调用.

     (2). 在Java中, JDK已经内置实现这种模式的一种机制—代理.
     (3). ( java.lang.reflect.Proxy)类:
      Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。

     (4). 动态代理类(以下简称为代理类)是一个实现在创建类时在运行时指定的接口列表的类,该类具有下面描述的行为。
      代理接口:是代理类实现的一个接口。 InvocationHandler
      代理实例:是代理类的一个实例。 实现了InvocationHandler接口的类

     (5). 使用JDK的AOP进行拦截方法, API上面说的非常清楚,代理对象必须实现一个接口

     (6).public interface InvocationHandler
         InvocationHandler 是代理实例的调用处理程序 实现的接口。 此接口中提供一个方法Invoke.

     (7).Invoke方法简单理解:
        当你获取到了代理对象(代理对象和原始对象一样,实现了共同的接口)以后,在代理对象上调用接口中暴露的方法,这个时候就会先调用Invoke方法,然后再调用原始类中的实际方法. 

   //JDKProxyFactory:   

package com.spring.chapter6.service.impl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JDKProxyFactory implements InvocationHandler {
	private Object targetObj;

	public Object getInstance(Object targetObj) {
		this.targetObj = targetObj;
		return Proxy.newProxyInstance(targetObj.getClass().getClassLoader(),
				targetObj.getClass().getInterfaces(), this);
	}

	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		UserServiceImpl userServiceImpl = (UserServiceImpl)targetObj;
		if(userServiceImpl.getUser() != null){
			return method.invoke(targetObj, args);
		}
		return null;
	}
}

  //测试类 

package com.spring.chapter6.service.impl;

import com.spring.chapter6.service.UserService;

public class Test {
	public static void main(String[] args) {
		JDKProxyFactory factory = new JDKProxyFactory();
		UserService userService = (UserService) factory
				.getInstance(new UserServiceImpl("xiaozhang"));
		userService.create();
	}
}

 

 

分享到:
评论

相关推荐

    jdk6(1.6.0_45)

    "jdk6(1.6.0_45)"是JDK的第6个主要版本的一个更新,具体为1.6.0的第45次更新。这个版本在2013年发布,它包含了Java编程语言的编译器、Java虚拟机(JVM)、类库以及开发者工具,如Java调试器和性能分析工具。 JDK 6...

    java-jdk11.0.1

    6. **JEP 320:移除Java EE和Corba模块**:为了简化JDK,JDK 11移除了与Java EE和Corba相关的模块,这些技术已经被现代开发实践所取代。 7. **JEP 318:低内存运行时模式**:引入了一个名为“compact strings”的低...

    jdk-6u45-x64

    JDK 6u45是JDK 6的第45个更新版本,包含了众多的性能优化、稳定性和安全性改进。这个版本对于开发者来说,提供了更稳定的开发环境,同时对应用程序的性能进行了提升,使得Java程序在运行时更加高效。 二、Windows x...

    jdk-1.6.0 源代码 二

    这次分享的是JDK 1.6.0源代码的第二部分,虽然不完整,但依然能让我们深入理解其内部工作原理。 **1. 类加载机制** Java的类加载机制是通过类加载器完成的,包括启动类加载器(Bootstrap ClassLoader)、扩展类加载...

    jdk 64bit 1.6 green

    JDK 1.6,也称为Java SE 6,是Java平台标准版的第六个主要版本。这个版本在2006年发布,引入了许多新特性和改进,包括: 1. **增强的Swing组件**:JDK 1.6对Swing UI库进行了大量优化,提高了性能,并添加了新的...

    jdk-6u45-windows-i586

    JDK1.6,全称为Java Development Kit的第6个更新版本(Update 45),是Oracle公司提供的用于开发和运行Java应用程序的重要工具集。这个版本是专为32位Windows操作系统设计的,确保了在该平台上对Java应用程序的兼容...

    SpringAOP之探秘(动态代理、责任链模式、注解使用)

    3. **第六章_cache-demo.zip**:此示例可能进一步扩展了缓存相关的实现,包括不同类型的缓存策略、缓存更新和过期策略等。 4. **第二章_execution-demo.zip**:这个代码可能演示了如何通过`@Around`通知和`@...

    jdk-6 跟踪项目

    在这个项目中,重点是关于Java Development Kit(JDK)的第六个主要版本,即JDK 6。JDK是Oracle公司提供的一个包含Java编程语言和Java平台标准版(Java SE)核心组件的软件开发工具包。JDK 6在2006年发布,它引入了...

    设计模式及代码

    1. **代理模式 (12第十二讲:代理模式.7z)** 代理模式是一种结构型设计模式,它为一个对象提供一个代理以控制对该对象的访问。在Java中,代理模式可以用来实现动态代理,例如Spring AOP(面向切面编程)就是基于此...

    Java JDK实例宝典

    14 使用正则表达式验证电话号码的格式 第6章 Java异常处理 6. 1 throw. throws. try和catch 6. 2 自定义异常类 6. 3 使用finally 6. 4 使用异常的技巧与原则 第7章 IO——输入输出流 7...

    jdk1.6.0_20

    1. 改进的动态代理:在JDK 1.6中,Java的动态代理得到了增强,可以更方便地创建代理类,这对于实现AOP(面向切面编程)和其他设计模式提供了便利。 2. 新的Swing组件和改进:此版本增加了新的Swing组件,如...

    jdk-6u45-windows-i586.rar

    "6u45"表示这是JDK 6的第45个更新版本,通常这些更新会修复已知问题、提升性能并增加新特性。 描述中的信息看似重复,可能是因为输入错误,但我们可以理解为该压缩包包含的是JDK 6u45针对Windows i586(即32位)...

    OpenJDK11U-jdk_x64_linux_hotspot_11.0.6_10.tar.gz

    4. **11.0.6_10**: 这是版本号,表示OpenJDK 11的第6次更新(Update 10)。每个更新通常会修复已知问题、提高性能和安全性,并可能包含新的功能。 5. **Linux**: 这个版本的OpenJDK是为Linux操作系统设计的,Linux...

    win64位jdk1.6

    4. **动态代理**:通过`java.lang.reflect.Proxy`类,开发者可以创建动态实现接口的代理对象,用于实现AOP(面向切面编程)和其他设计模式。 5. **改进的并发库**:JDK1.6提供了更强大的并发工具,如`java.util....

    JDK1.6中文帮助文档五

    在这个第五部分的中文帮助文档中,我们将深入探讨一些关键知识点,帮助开发者更好地理解和利用JDK1.6的功能。 1. **增强的泛型支持** JDK1.6在泛型方面进行了加强,提供了更丰富的类型推断和泛型通配符,使得代码...

    常用的几种设计模式,面试必问

    本文主要介绍四种常见的设计模式:单例模式、工厂模式、观察者模式和代理模式,以及JDK提供的动态代理模式。 **知识点1:单例模式** 单例模式是一种限制类实例化次数的设计模式,确保一个类只有一个实例,并提供...

    Professional Java Jdk 6 part2 Code.rar

    《Professional Java Jdk 6 part2》是一本深入解析Java JDK 6的专著,而提供的"Code.rar"压缩包则是该书籍第二部分的源代码资源。这些源代码旨在帮助读者更好地理解和实践书中所讲解的Java编程技术。下面将详细讨论...

    软件设计模式之结构模式

    8. **代理模式(Proxy)**:再次提及,因为它是结构模式中非常重要的一种,它可以分为静态代理和动态代理,动态代理如Java中的JDK Proxy和CGLIB。 以上这些模式在实际开发中有着广泛的应用,如在框架设计、分布式...

    JDK1.6API中文版CHM格式

    3. **动态代理**:通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口,开发者可以创建动态代理对象,实现代理模式和AOP(面向切面编程)的功能。 4. **NIO.2**:引入了`java.nio.file`...

Global site tag (gtag.js) - Google Analytics