spring入门(13) JDK动态代理

首先我们来了解一下java中的代理模式,代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就 是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象 ,而代理对象可以在客户端和目标对象之间起到中介的作用。

1、抽象主题角色

声明了真实主题和代理主题 的共同接口,这样一来在任何可以使用真实主题的地方都可以是使用代理主题

2、代理主题(Proxy)角色:

代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色 相同的接口,以便可以在任何时候都可以替代真实主题控制对真实主题的引用,负责在需要的时候创建真实主题对象(和删 除真实主题对象);代理角色通常在将客户端调用传递给真实的主题之前或之后,都要执行某个操作,而不是单纯地将调用 传递给真实主题对象。

3、真实主题角色

定义了代理角色所代表地真实对象

JDK动态代理是基于接口 的,必须实现了某一个或多个任意接口才可以被代理,并且只有这些接口中的方法会被代理.下面通过一个(男朋友要和女朋 友分手)案例讲解JDK动态代理的实现.

1、创建一个接口

package www.csdn.spring.jdk.proxy;
//抽象主题 角色
public interface SayGoodBye {
/**
* 说的内容
* @param content
*/
public void say(String content);
}
package www.csdn.spring.jdk.proxy;  

//抽象主题 角色  

public interface SayGoodBye {  

/** 

 * 说的内容 

 * @param content 

 */

public void say(String content);  

}

2、创建接口的实现类。

package www.csdn.spring.jdk.proxy;
//这是主题角色
public class SayGoodByeImpl implements SayGoodBye {
@Override
public void say(String content) {
System.out.println("say:" + content);
}
}
package www.csdn.spring.jdk.proxy;  

//这是主题角色  

public class SayGoodByeImpl implements SayGoodBye {  

@Override
public void say(String content) {
System.out.println("say:" + content);
}  

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, 主题
, 代理
, java 代理 jdk代理
, 角色
, content
, jdk动态代理
真实
spring jdk动态代理、jdk动态代理、jdk动态代理实现原理、jdk 动态代理详解、jdk 动态代理原理,以便于您获取更多的相关知识。

时间: 2025-01-15 20:37:23

spring入门(13) JDK动态代理的相关文章

Spring AOP源码分析(四)Spring AOP的JDK动态代理

本篇文章将会介绍上一个例子中的源码执行情况,从中熟悉整个SpringAOP的一些概念和接口设计.  首先整个SpringAOP的分两大过程.  第一个过程:根据xml文件或者注解中配置的拦截信息,生成相应的代理对象,这个代理对象包含了对应的拦截器.  第二个过程:执行所拦截的方法时,就是调用代理对象的执行逻辑,完成各种拦截.  本文章先对第二个过程进行源码解析.  对第一个过程先做简单概述,如果拦截的类的对应方法是接口方法,则使用JDK的Proxy进行代理对象的创建否则使用CGLIB进行代理对象

spring学习笔记(6)AOP前夕[1]jdk动态代理实例解析

JDK动态代理技术 动态代理最常见应用是AOP(面向切面编程).通过AOP,我们能够地拿到我们的程序运行到某个节点时的方法.对象.入参.返回参数,并动态地在方法调用前后新添一些新的方法逻辑,来满足我们的新需求,比如日志记录等. 动态代理常见有两种方式:基于JDK的反射技术的动态代理和基于CGLib的动态代理. 使用反射技术创建动态代理 JDK创建动态代理的核心是java.lang.reflect.InvocationHandler接口和java.lang.reflect.Proxy类.让我们先分

JDK动态代理简介

动态代理 代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的相关方法,提供预处理.过滤.事后处理等服务,动态代理及通过反射机制动态实现代理机制.JDK 中的 java.lang.reflect.Proxy 类可以用来实现动态代理. 首先,准备一个简单的接口和实现类 /** * 接口 IHello.java */ public interface IHello { void hello(); } /** * 实现类 Hello.java */ public class Hello i

java代理 jdk动态代理应用案列_java

java代理有jdk动态代理.cglib代理,这里只说下jdk动态代理,jdk动态代理主要使用的是java反射机制(既java.lang.reflect包) 原理是(歌手.经纪人做例子): 建立一个公共的接口,比如:歌手public interface Singer: 用具体的类实现接口,比如:周杰伦,他是歌手所以实现Singer这个类,class MySinger implements Singer 建立代理类,这里也就是经纪人,他需要实现InvocationHandler类,并重写invok

java jdk动态代理详解_java

jdk动态代理要对一个类进行代理,被代理的类必须实现至少一个接口,并且只有接口中的方法才能被代理. jdk实现动态代理一般分为三步: 1. 编写接口和实现类. 2. 写一个处理器,该处理器实现InvocationHandler接口,该接口只有一个方法,其签名为public Object invoke(Object proxy, Method method, Object[] args)throws Throwable;可在该处理器的实现方法中,在方法调用前和调用后加入自己的代码,从而进行动态拦截

spring源码学习之【准备】jdk动态代理例子

一:被代理的对象所要实现的接口 1 package com.yeepay.testpoxy; 2 3 import java.util.Map; 4 5 /** 6 * 被动态代理的接口 7 * @author shangxiaofei 8 * 9 */ 10 public interface MyCheckPay { 11 /** 12 * 付钱的接口 13 * @param name 14 * @param money 15 * @return 16 */ 17 public Map<Str

【spring框架】利用动态代理实现AOP

目标:生成一个UserDao的代理,然后在代理执行的过程中,把关于日志记录的逻辑加进去. UserDao.java: package cn.edu.hpu.dao; import cn.edu.hpu.model.User; public interface UserDao { public void save(User u); } UserDaoImpl.java: package cn.edu.hpu.dao.Impl; import cn.edu.hpu.dao.UserDao; impo

深入理解JDK动态代理机制

一.现实生活中的代理?         在现实生活中,我们常见的有服务器代理商.联想PC代理商.百事可乐.火车票.机票等代理商,为什么会有这些个代理商呢?设想以买火车票为场景,如果我要买一张从广州去长沙的火车票,就必须去火车站排队购票,如果排队的人比较多的话,非常的耽误时间.但有了火车票代理商之后,我就可以直接去找个离我最近的代理商买票,因为这样的代理商不止一个二个,遍布全市各地. 所以代理商的出现不但减轻了火车站售票员的工作压力,同时也为市民购票提供了许多方便.只是代理商会收5块的手续费.从这

在Spring中如何处理配置动态代理生成不同bean实现?

问题描述 最近在做一个老系统的数据库移植工作,从oracle一直到mysql,但是由于mysql数据不完整,需要先查询mysql,如果没有再去查oracle,待完整后再去掉oracle.我的想法是,抽象出dao接口,然后2套实现逻辑,最后用代理模式处理先后查询.代码如下:publicinterfaceUserDAO{publicvoidfind();}classUserDAOOracleImplimplementsUserDAO{publicvoidfind()..}classUserDAOMy