`
Supanccy2013
  • 浏览: 213465 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java设计模式之--jdk动态代理(实现aop编程)

阅读更多

    与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由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编程原理

    为了说明Spring的AOP原理,本人使用代理模式中的动态代理完成演示AOP编程的原理的演示。相信,如果你耐心看完整个程序(几乎一行注释一行代码),那么你对Spring这个东西就不是觉得有什么神秘了! 阅读对象:凡是喜爱...

    Java 动态代理.md

    动态代理在 Java 中有着广泛的应用,比如 AOP 的实现原理、RPC远程调用、Java 注解对象获取、日志框架、全局性异常处理、事务处理等。 在了解动态代理前,我们需要先了解一下什么是代理模式。 代理模式 代理模式...

    Spring AOP源码深度解析:掌握Java高级编程核心技术

    动态代理是实现AOP的基础,它通过JDK动态代理或CGLIB代理生成被代理对象的子类。通知是织入到目标对象连接点上的一段程序,例如@Before、@After等。 切点定义了通知应该在哪些连接点上触发。而切面则是通知和切点的...

    JAVA高并发高性能高可用高扩展架构视频教程

    Java-Base64算法_创新_防止表单重复提交 JAVA企业级基础课题(HashMap那些事) 企业架构师必备技能(JAVA核心技术反射) JavaWeb之基础(手写实现Tomcat服务器)...揭开springAOP神秘面纱之动态代理 网络爬虫之JAVA正则表达式

    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-advance:java进阶,包含 常用设计模式、线程和并发、spring核心代码、mybatis核心代码、springboot2.0、springcloud G版本、docker的使用、各类面试题

    java进阶源码分析专题常用设计模式线程与并发锁的使用深度理解synchronized、volatile、cas手写ASQSpring5IOC容器设计原理及高级特性AOP设计原理FactoryBean与BeanFactorySpring事务处理机制Spring JDK动态代理...

    linux下java以及maven的安装包

    内容概要:当在Linux系统上安装Java和Maven时,首先需要确保您的系统已经安装了适当...②通过maven自主学习,还可以知道一些知识点都是怎么在Spring中体现的比如IOC、AOP、代理、切面、循环依赖都是如何设计和实现的。

    Java Web程序设计教程

    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使用...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    设计模式 结构模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 创建模式 抽象工厂模式 工厂方法模式 建造这模式 原型模式 单例模式 行为模式 责任链模式 命令模式 解释...

    高级开发spring面试题和答案.pdf

    SPI 机制(Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制), 很多地方有用到: AOP Spring的AOP的底层实现原理; 为什么jdk动态代理是必须是接口 两种动态代理的区别 AOP实现方式:...

    达内java培训目录

    Servlet/JSP Servlet生命周期及Servlet服务器、Tomcat部署配置、JSP语法、自定义标记、JSTL和EL表达式、JSP 新特性、Java Web 设计模式。 透彻理解Servlet核心原理;熟练掌握Servlet API;透彻理解JSP引擎工作原理;...

    Java面试宝典-经典

    13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托方案怎么配置? 123 16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有...

    java面试题库2021.pdf

    目录 一、 JavaSE 部分 ...九、 设计模式 1、 结构型模式 ①代理模式 ②装饰模式 ③适配器模式 2、 创建型模式 ①单例模式 3、 行为型模式 ①策略模式 ②观察者模式 4、 所有模式汇总 十、 场景题 十一、 UML

    基于java语言,使用springboot框架开发的学生考勤管理系统.7z

    ②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的、:I0C、AOP、Bean生命周期、上下文、作用域、资源处理等。 基于java语言,使用springboot框架开发的学生考勤管理系统 开发语言:Java 框架:springboot JDK...

    spring-boot示例项目

    该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户...

    Java高级工程师简历模板18k+

    基本资料 教育背景 ...4.熟悉java常用的设计模式以及常用算法以及常用的数据结构; 5.熟悉TCPIP协议,HTTP协议,OAUTH2协议等; 6.熟练掌握SSM等框架使用,熟悉spring IOC ,springAop springs事物核心

    java 自整理的基础面试知识

    基础、数据结构和算法、基本数据类型、集合框架、算法、并发包源码、jdk中的设计模式、排序 以及复杂度、Spring、SpringAPI、Spring2依赖注入、Spring注解、Spring数据访问、Spring 的MVC、Spring拦截器 过滤器、...

    java面试题

    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. 缓存...

    java面试宝典

    211、开发中都用到了那些设计模式?用在什么场合? 52 212、UML方面 52 213、如何校验数字型? 53 214、CORBA是什么?用途是什么? 53 215、写一个方法,实现字符串的反转,如:输入abc,输出cba 53 216、数据类型之间的...

    spring:Spring框架

    是一种设计模式,主要解决在直接访问对象时代理的问题。通过代理对象访问目标对象,可以在目标对象实现的基础上,增加额外的功能,即扩展目标对象的功能。 分类: 静态代理:由程序员创建或工具生成代理类的源码,再...

Global site tag (gtag.js) - Google Analytics