Java反射 反射机制 RTTI 编译器在编译时打开和检查*.class文件 反射机制 运行时打开和检查*.class文件 Java反射常见的方法 java反射的应用 setAccessible(boolean bool) 设置为true,可以在任意地方访问到类的私有成员,还可以修改私有成员,即使这个类的私有成员没有get、set方法,非常有用 Java动态代理 无论是哪种代理方式,都存在代理对象和目标对象两个模型 java动态代理的运用场景 java反射和动态代理...
和JDK代理一样,CGLib 代理也是一种动态代理方式,而且相比JDK代理更加的灵活,可以代理任何类(除了final修饰的)。 先上代码,还是以买房为例,看下具体实现: 需要被代理的类,这次不是某个接口的实现类,而是一个普通类 public class HouseBuyer {public void buy() {System.out.println("要买房");}}代理类 public class CglibHouseCompanyProxy implements MethodInterceptor {public Object getInstance(Object target) {En...
本文主要介绍Java中两种常见的动态代理方式:JDK原生动态代理和CGLIB动态代理。 什么是代理模式 就是为其他对象提供一种代理以控制对这个对象的访问。代理可以在不改动目标对象的基础上,增加其他额外的功能(扩展功能)。 代理模式角色分为 3 种:Subject(抽象主题角色):定义代理类和真实主题的公共对外方法,也是代理类代理真实主题的方法; RealSubject(真实主题角色):真正实现业务逻辑的类; Proxy(代理主题角色):用来...
静态代理 抽象主题角色:声明真实主题和代理主题的共同接口。 代理主题角色:代理主题内部含有对真实主题的引用,从而在任何时候操作真实主题对象;代理主题提供一个与真实主题相同的接口,以便在任何时候都可以代替真实主题。代理角色通常在将客户端调用传递给真实的主题之前或之后,都要执行某个操作,而不是单纯的传递调用。 真实主题角色:定义代理角色所代表的的真实对象。 UML图:抽象主题public interface Subject {void re...
如题代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。代理模式可细分为如下, 本文不做多余解释 远程代理 虚拟代理 缓冲代理 保护代理借鉴文章https://www.cnblogs.com/java-my-life/archive/2012/04/23/2466712.html 《Java设计模式》 -Java动态代理(InvocationHandler)AbstractUserDAO 抽象的用户DAO类, 抽象主题角色 package proxy;/*** @description 抽象的用户DAO类, 抽象...
JDK 动态代理是通过 JDK 中的 java.lang.reflect.Proxy 类实现的。下面通过具体的案例演示 JDK 动态代理的使用。 1. 创建项目 在 MyEclipse 中创建一个名称为 springDemo03 的 Web 项目,将 Spring 支持和依赖的 JAR 包复制到 Web 项目的 WEB-INF/lib 目录中,并发布到类路径下。 2. 创建接口 CustomerDao 在项目的 src 目录下创建一个名为 com.mengma.dao 的包,在该包下创建一个 CustomerDao 接口,编辑后如下所示。 package com...
package cn.mycast.bank.db;2 3 import java.sql.Connection;4 import java.sql.SQLException;5 import java.util.LinkedList;6 import cn.mycast.bank.util.JdbcUtil;7 public class MyDatabasePool {8 LinkedList<Connection> connPool=new LinkedList<Connection>();//存放连接9 private int Maxsize=10; 10 private int Initsize=6; 11 int Currentsize=0; 12 public MyDatabasePool(){ 13 for(i...
使用动态代理可以拦截一个对象某个方法的执行,并执行自定义的方法,其本质是反射优点:灵活缺点:由于其本质是反射,所以执行速度相对要慢一些 二、数据库连接池设计思想1.为什么要使用数据库连接池:创建Connection对象的过程是非常耗时的,为了保证Connection可以重用,应该对Connection进行管理。2.设计要求:(1)连接池能够实现维护多个连接,必须要保证每一个线程获取到的是不同的Connection对象。(2)提供一个方法能够回收...
:final Connection conn=pool.remove(0);//利用动态代理改造close方法Connection proxy= (Connection) Proxy.newProxyInstance(conn.getClass().getClassLoader(), conn.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {if("close".equals(method.getName())){//对于想改造的close方法,我们自己写retConn(conn);return nul...
接口 实现Connection getConnection()方法 定义一个静态的成员属性LinkedList类型作为连接池,在静态代码块中初始化5条数据库连接,添加到连接池中,在getConnection方法中,当获取连接的时候在连接池中remove掉一条连接就可以了import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statemen...
使用者在用完数据库连接后通常是直接调用连接的方法close来释放数据库资源,如果用我们前面提到的连接池的实现方法,那语句conn.close()将被某些特定的语句所替代。 第二:使连接池无法对之中的所有连接进行独占控制。由于连接池不允许用户直接调用连接的close方法,一旦使用者在使用的过程中由于习惯问题直接关闭了数据库连接,那么连接池将无法正常维护所有连接的状态,考虑连接池和应用由不同开发人员实现时这种问题更容易出现。...
目前正在看Hadoop RPC框架的源码,在深入了解这些之前,有一些基础知识需要回顾下。 1. java反射机制及动态代理 2. java网络编程 3. java NIO 先总结下第一个,java反射机制及动态代理的相关知识点: java反射机制 在看与java反射机制相关的代码前,试着看看目前正在看Hadoop RPC框架的源码,在深入了解这些之前,有一些基础知识需要回顾下。 1. java反射机制及动态代理 2. java网络编程 3. java NIO先总结下第一个,java反射机制及...
brpublic class UserDAOImpl{ brbr public void save() { br // TODO Auto-generated method stub br System.out.println(user saved); br } br} br//相关配置,省略了一些不相关内容 brbean id=userDAO class=UserDAOImpl brbean id=userDAOProxy class=org.public class UserDAOImpl{public void save() {// TODO Auto-generated method stubSystem.out.println("user saved");} } //相关配置,省略了一些不相关内容测试代码 App...
即使是这么简单,Memoizer也应该是java程序员一个有用的工具.
记忆是衍生自Lisp,Python,和Perl等过程性语言的一种设计模式,它可以对前次的计算结果进行记忆。 一个实现了记忆功能的函数, 带有显式的cache, 所以, 已经计算过的结果就能直接从cache中获得, 而不用每次都进行计算.记忆能显著的提升大计算量代码的效率. 而且是一种可重用的方案.本文阐述了在Java中使用这一模式的方法,并提供了一个可以提供上述功能的记忆类: Foo foo = (Foo) Memoizer.memoize(new FooImpl()); 这里,Foo是...