很有意思的一个东西,在java.lang.reflect包下

  示例代码

package com.guangshan.test.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; public class ProxyClass implements InvocationHandler { private Object target; public ProxyClass() {
// TODO Auto-generated constructor stub
} public ProxyClass(Object object) {
this.target = object;
} public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object object = method.invoke(this.target, args); //大致和js中的apply(call)类似,第一个把this传进去,第二个把参数传进去,返回方法调用的返回值
System.out.println("[" + method.getName() + "]");
return object;
} public static void main(String[] args) {
RealSubject sub = new RealSubject();
Subject object = (Subject)Proxy.newProxyInstance(RealSubject.class.getClassLoader(), RealSubject.class.getInterfaces(), new ProxyClass(sub));
System.out.println(object.getHello());
} }

  这个代理可以代理任何类,也可以把Proxy.newProxyInstance方法抽出来,传入一个class对象和该class的实例,返回的就是该实例的代理实例。

  java代理是基于接口的代理。没有接口时是否会导致代理失败?

  spring中自动装载的返回的最终应该也是一个代理类,但是上面返回之前要用cast强制转换类型,spring是如何用反射实现的呢?

   想起来了,好像是通过泛型进行强制转化的(T)Type

  <T> T getBean(Class<T> requiredType) throws BeansException

  就是这样

  (Type)类型转换,cast类型转换,现在如果只知道传进来的参数为Type.class对象,怎么利用反射转换类型?

  public <U> Class<? extends U> asSubclass(Class<U> clazz)

强制转换该 Class 对象,以表示指定的 class 对象所表示的类的一个子类。检查强制转换的有效性,如果无效则抛出 ClassCastException。如果此方法成功了,它将始终返回对此 class 对象的一个引用。

此方法的使用场合为:客户端需要“收缩转换” Class 对象的类型,以便将其传递给某个 API,且该 API 对它愿意接受的 Class 对象进行限制。强制转换会产生一个编译时警告,因为强制转换的正确性无法在运行时检查(因为常规类型是通过擦除实现的)。

  

java动态代理类的更多相关文章

  1. 初看Mybatis 源码 (二) Java动态代理类

    先抛出一个问题,用过Mybatis的都知道,我们只需要定义一个Dao的接口,在里面写上一些CRUD相关操作,然后配置一下sql映射文件,就可以达到调用接口中的方法,然后执行sql语句的效果,为什么呢? ...

  2. java代理模式及动态代理类

     1.      代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用 ...

  3. Java 动态代理机制分析及扩展

    Java 动态代理机制分析及扩展,第 1 部分 王 忠平, 软件工程师, IBM 何 平, 软件工程师, IBM 简介: 本文通过分析 Java 动态代理的机制和特点,解读动态代理类的源代码,并且模拟 ...

  4. [转]Java 动态代理机制分析及扩展

    引言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执 ...

  5. java动态代理_aop2

      一.什么是代理? 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 代理模 ...

  6. Java动态代理学习

    动态代理类 Java动态代理类位于java.lang.reflect包下,一般主要涉及到以下两个类: 1.Interface InvocationHandler 该接口中仅定义了一个方法: Objec ...

  7. Java 动态代理机制分析及扩展--转

    http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/#icomments http://www.ibm.com/developerworks/c ...

  8. Java 动态代理机制分析及扩展,第 1 部分

    Java 动态代理机制分析及扩展,第 1 部分 http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/ 本文通过分析 Java 动态代理的机制和特 ...

  9. java动态代理使用详解

    我们都知道AOP的原理就是java的动态代理机制,下面我就对java的动态代理机制进行学习与总结 java动态代理的实现有两个重要的类: Proxy:类 作用就是用来动态创建一个代理对象的类 Invo ...

随机推荐

  1. mongoDB数据库的修复

    mongoDB数据库的修复 标签: 数据库mongodbdatabasefile文档 2011-08-05 11:33 2323人阅读 评论(0) 收藏 举报  分类: 数据库技术/Cache技术/存 ...

  2. c++ 字符输入读取

    cin.clear()重置输入流 cin.get()锁住屏幕直到获取输入 while(cin) cin.get(ch) 方法返回的是一个cin对象,istream类提供了可以将istream对象转换为 ...

  3. AJAX跨域调用ASP.NET MVC的问题及解决方案

    AJAX跨域调用ASP.NET MVC的问题及解决方案 问题描述: 解决方法: 只需要在web.config中添加如下标为红色的内容即可: <system.webServer> <h ...

  4. centos 和KVM安装

  5. mysql 随机查询 记录集

    有时候需求需要随机从数据库查询若干条记录集,网上搜了一下,几篇博文都是些重复的.....不知道他们谁抄的谁的,这里除了介绍提供一种笔者自己想到的方法,本质都是利用mysql 的rand() 第一种方法 ...

  6. .net core 下的Area注册

    app.UseMvc(routes => { routes.MapAreaRoute( name: "AreaRoute", areaName: "Admin&qu ...

  7. springmvc基本知识点

    springmvc高级知识:

  8. JS中深拷贝数组、对象、对象数组方法(转载)

    我们在JS程序中需要进行频繁的变量赋值运算,对于字符串.布尔值等可直接使用赋值运算符 “=” 即可,但是对于数组.对象.对象数组的拷贝,我们需要理解更多的内容. 首先,我们需要了解JS的浅拷贝与深拷贝 ...

  9. 第五章 大数据平台与技术 第13讲 NoSQL数据库

    NoSQL不是不用SQL,是Not only SQL,不仅仅是结构化的查询. NoSQL兴起的原因 在Web2.0时代新浪一分钟可以发送两万条微博,苹果可以下载4.7万次应用. 数据的高并发性,同时有 ...

  10. 30-Transformation(HDU4578)-区间线段树(复杂)

    http://acm.hdu.edu.cn/showproblem.php?pid=4578 Transformation Time Limit: 15000/8000 MS (Java/Others ...