与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。
但是,JDK的动态代理依靠接口实现,如果有些类并没有实现接口,则不能使用JDK代理,这就要使用cglib动态代理了。
一下是jdk动态代理实例
一:接口
package com.supan.dao;
/**
* <访问数据库dao层结果>
*/
public interface DaoInterface
{
/**
* <增加>
*/
public void insert(String id, String name);
/**
* <更新>
*/
public void update(String id, String name);
/**
* <删除>
*/
public void delete(String id, String name);
/**
* <查询>
*/
public void select(String id, String name);
}
二:实现类
package com.supan.dao.imp;
import com.supan.dao.DaoInterface;
public class PersonDaoImpl implements DaoInterface
{
@Override
public void insert(String id, String name)
{
System.out.println("********");
System.out.println("增加");
System.out.println(id);
System.out.println(name);
System.out.println("********");
}
@Override
public void update(String id, String name)
{
System.out.println("********");
System.out.println("更新");
System.out.println(id);
System.out.println(name);
System.out.println("********");
}
@Override
public void delete(String id, String name)
{
System.out.println("********");
System.out.println("删除");
System.out.println(id);
System.out.println(name);
System.out.println("********");
}
@Override
public void select(String id, String name)
{
System.out.println("********");
System.out.println("查询");
System.out.println(id);
System.out.println(name);
System.out.println("********");
}
}
三:实现jdk动态代理类的代理工厂
package com.supan.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* <该类是jdk动态代理模式中的核心类>
* @author 陈超阳
*/
public class DaoProxyObject implements InvocationHandler
{
/**该属性请用Object类型,通用性强*/
private Object target;
/**
* <该方法用来返回动态代理对象>
* @param target 目标对象
* @return 代理对象
*/
public Object bind(Object target)
{
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
/**
* <动态代理必须要实现的方法,在该方法中可以实现AOP编程>
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
Object result = null;
if(method.getName().equals("update") || method.getName().equals("delete") && method.getName().equals("indeset"))
{
System.out.println("事务开始");
method.invoke(target, args);
System.out.println("事务结束");
}
else
{
System.out.println("非事务方法开始调用");
result = method.invoke(target, args);
System.out.println("非事务方法调用结束");
}
return result;
}
}
四:测试
package com.supan.test;
import com.supan.dao.DaoInterface;
import com.supan.dao.imp.PersonDaoImpl;
import com.supan.proxy.DaoProxyObject;
public class MyDynaProxyTest
{
public static void main(String[] args)
{
DaoProxyObject proxy = new DaoProxyObject();
DaoInterface pd = (DaoInterface)proxy.bind(new PersonDaoImpl());
pd.update("33", "chenchaoyang");
pd.select("33", "dddd");
}
}
五:输出结果
事务开始
********
更新
33
chenchaoyang
********
事务结束
非事务方法开始调用
********
查询
33
dddd
********
非事务方法调用结束
分享到:
相关推荐
为了说明Spring的AOP原理,本人使用代理模式中的动态代理完成演示AOP编程的原理的演示。相信,如果你耐心看完整个程序(几乎一行注释一行代码),那么你对Spring这个东西就不是觉得有什么神秘了! 阅读对象:凡是喜爱...
动态代理在 Java 中有着广泛的应用,比如 AOP 的实现原理、RPC远程调用、Java 注解对象获取、日志框架、全局性异常处理、事务处理等。 在了解动态代理前,我们需要先了解一下什么是代理模式。 代理模式 代理模式...
动态代理是实现AOP的基础,它通过JDK动态代理或CGLIB代理生成被代理对象的子类。通知是织入到目标对象连接点上的一段程序,例如@Before、@After等。 切点定义了通知应该在哪些连接点上触发。而切面则是通知和切点的...
Java-Base64算法_创新_防止表单重复提交 JAVA企业级基础课题(HashMap那些事) 企业架构师必备技能(JAVA核心技术反射) JavaWeb之基础(手写实现Tomcat服务器)...揭开springAOP神秘面纱之动态代理 网络爬虫之JAVA正则表达式
8.1.1 MVC设计模式 117 8.1.2 Struts框架工作原理 118 8.1.3 Struts框架执行流程 118 8.2 MyEclipse创建基于Struts框架的项目 119 8.2.1 创建Struts项目 119 8.2.2 Struts组件向导 121 8.2.3 Struts配置文件编辑器 ...
java进阶源码分析专题常用设计模式线程与并发锁的使用深度理解synchronized、volatile、cas手写ASQSpring5IOC容器设计原理及高级特性AOP设计原理FactoryBean与BeanFactorySpring事务处理机制Spring JDK动态代理...
内容概要:当在Linux系统上安装Java和Maven时,首先需要确保您的系统已经安装了适当...②通过maven自主学习,还可以知道一些知识点都是怎么在Spring中体现的比如IOC、AOP、代理、切面、循环依赖都是如何设计和实现的。
12.1.3java动态代理与aop 244 12.1.4springaop简介 245 12.2使用spring的通知 246 12.2.1beforeadvice 246 12.2.2afterreturningadvice 248 12.2.3methodinterceptor 249 12.2.4throwadvice 250 12.3使用...
SPI 机制(Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制), 很多地方有用到: AOP Spring的AOP的底层实现原理; 为什么jdk动态代理是必须是接口 两种动态代理的区别 AOP实现方式:...
Servlet/JSP Servlet生命周期及Servlet服务器、Tomcat部署配置、JSP语法、自定义标记、JSTL和EL表达式、JSP 新特性、Java Web 设计模式。 透彻理解Servlet核心原理;熟练掌握Servlet API;透彻理解JSP引擎工作原理;...
13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托方案怎么配置? 123 16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有...
目录 一、 JavaSE 部分 ...九、 设计模式 1、 结构型模式 ①代理模式 ②装饰模式 ③适配器模式 2、 创建型模式 ①单例模式 3、 行为型模式 ①策略模式 ②观察者模式 4、 所有模式汇总 十、 场景题 十一、 UML
②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的、:I0C、AOP、Bean生命周期、上下文、作用域、资源处理等。 基于java语言,使用springboot框架开发的学生考勤管理系统 开发语言:Java 框架:springboot JDK...
设计模式 结构模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 创建模式 抽象工厂模式 工厂方法模式 建造这模式 原型模式 单例模式 行为模式 责任链模式 命令模式 解释...
该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户...
基本资料 教育背景 ...4.熟悉java常用的设计模式以及常用算法以及常用的数据结构; 5.熟悉TCPIP协议,HTTP协议,OAUTH2协议等; 6.熟练掌握SSM等框架使用,熟悉spring IOC ,springAop springs事物核心
基础、数据结构和算法、基本数据类型、集合框架、算法、并发包源码、jdk中的设计模式、排序 以及复杂度、Spring、SpringAPI、Spring2依赖注入、Spring注解、Spring数据访问、Spring 的MVC、Spring拦截器 过滤器、...
70. MVC设计模式 53 71. Hibernate 54 71.1. Hibernate 介绍 54 71.2. Hibernate 实现原理 55 71.3. Hibernate 优点 56 71.4. Hibernate 的缓存体系 56 71.4.1. 一级缓存: 56 71.4.2. 二级缓存: 56 71.4.3. 缓存...
211、开发中都用到了那些设计模式?用在什么场合? 52 212、UML方面 52 213、如何校验数字型? 53 214、CORBA是什么?用途是什么? 53 215、写一个方法,实现字符串的反转,如:输入abc,输出cba 53 216、数据类型之间的...
是一种设计模式,主要解决在直接访问对象时代理的问题。通过代理对象访问目标对象,可以在目标对象实现的基础上,增加额外的功能,即扩展目标对象的功能。 分类: 静态代理:由程序员创建或工具生成代理类的源码,再...