`

spring动态代理与静态代理

阅读更多
今天整理复习一下spring的代理实现机制,动态代理与静态代理,一个基于接口,一个基于实现类
spring基本配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<!--静态代理类,需要构造子的实现,对应相应代理接口 -->
	<bean id="staticProxy" class="com.kangkang.proxy.StaticProxy">
		<constructor-arg ref="userDaoImp"></constructor-arg>
	</bean>
	<!--动态代理类 -->
	<bean id="dynaProxy" class="com.kangkang.proxy.DynaProxy"></bean>

	<!--接口实现类 -->
	<bean id="userDaoImp" class="com.kangkang.daoimp.UserDAOIMP"></bean>


	<!--业务测试 -->
	<bean id="userAction" class="com.kangkang.server.UserAction">
		<property name="userDAOIMP" ref="userDaoImp"></property>
		<property name="user" ref="user"></property>
	</bean>
	<!--vo对象 -->
	<bean id="user" class="com.kangkang.vo.User"></bean>
</beans>

接口类:
public interface UserDAO {
	boolean insert(User user);
	void test();
}

接口实现类:
public class UserDAOIMP implements UserDAO {

	public boolean insert(User user) {
		System.out.println("UserDAOIMP的insert方法被调用");
		return false;
	}

	public void test() {
		System.out.println("UserDAOIMP的test方法被调用");
		
	}


}

静态代理类:
public class StaticProxy implements UserDAO {
	public UserDAO userDAO;
	/**
	 * 构造子构造被代理对象
	 * @param userDAO
	 */
	public StaticProxy(UserDAO userDAO) {
		this.userDAO = userDAO;
	}

	public boolean insert(User user) {
		// TODO Auto-generated method stub
		return userDAO.insert(user);
	}

	public void test() {
		// TODO Auto-generated method stub
		doBefore();
		userDAO.test();
		doAfter();
	}

	private void doAfter() {
		// TODO Auto-generated method stub
		System.out.println("执行方法完毕");
	}

	private void doBefore() {
		// TODO Auto-generated method stub
	  System.out.println("开始执行方法");	
	}

}

动态代理类;
public class DynaProxy implements InvocationHandler {

	private Object obj;
	/**
	 * 创建代理对象
	 * @param obj
	 * @return
	 */
	public Object createObject(Object obj){
		this.obj=obj;
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(),this);
	
	}
	/**
	 * 通过反射机制执行被代理对对象方法
	 * @param proxy
	 * @param method
	 * @param args
	 */
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		doBefore();
		Object object =method.invoke(obj, args);
		doAfter();
		return object;
	}

	private void doBefore(){
		System.out.println("开始执行方法");
	}
	private void doAfter(){
		System.out.println("方法执行完毕");
		
	}
}
分享到:
评论

相关推荐

    Spring的静态代理和动态代理

    本篇我们将深入探讨Spring中的静态代理和动态代理,这两种代理模式在实际开发中都有广泛的应用。 首先,让我们理解什么是代理。代理模式是一种设计模式,它为一个对象提供一个代理以控制对这个对象的访问。在Spring...

    spring动态代理类的示范小版本,很简单的例子

    静态代理是在编译时就已经明确知道代理类和被代理类关系的方式,而Spring的动态代理则是在运行时生成代理类。在静态代理中,我们需要手动创建代理类并实现相同的方法,然后在代理类的方法中插入增强代码。相比于...

    spring+静态代理

    在Spring框架中,虽然动态代理(如JDK动态代理或CGLIB代理)更常见,因为它们可以自动创建代理对象,但静态代理也有其应用场景,特别是当需要在不依赖Spring的情况下,或者对性能有较高要求时。 要实现Spring框架下...

    代理设计模式:静态代理和动态代理的理解、实现与区别(优缺点)与SpringAOP的3种配置方式案例工程代码

    本资源主要涵盖了静态代理和动态代理两种常见类型的代理模式,以及Spring AOP中动态代理的三种配置方式。以下是详细的知识点解析: ### 静态代理 静态代理是程序员手动创建代理类并实现相同接口的方式。代理类和...

    spring 的动态代理详解

    与静态代理相比,它不需要在编译阶段就定义好代理类,而是通过反射机制在运行时创建代理对象,这为系统带来了更高的灵活性和扩展性。在Spring框架中,动态代理主要用于AOP(面向切面编程)功能的实现,允许开发者在...

    Spring模拟aop静态代理案例

    在Spring中,虽然静态代理可以手动实现,但更常见的是使用动态代理,如JDK的`java.lang.reflect.Proxy`或CGLIB库。动态代理在运行时根据接口或类动态生成代理对象,这使得代理对象的创建更加灵活,无需预先定义代理...

    cglib aop spring 动态代理

    静态代理--不适合企业开发,适合初学者理解代理。 jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口,则没办法代理这个类。 cglib代理, 1.cglib(Code Generation Library)是一...

    Spring AOP里的静态代理和动态代理用法详解

    Spring AOP里的静态代理和动态代理用法详解 Spring AOP里的静态代理和动态代理用法详解是关于 Spring AOP里的静态代理和动态代理的详细介绍。代理是一种设计模式,通过创建一个代理对象来控制对委托类对象的直接...

    Spring aop 之 静态代理 动态代理 Aspectj aop-config 等实现方式

    主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...

    Spring AOP的静态代理和动态代理,转移到调用处理器一个集中的方法中处理.docx

    【Spring AOP的静态代理和动态代理】 在软件开发中,代理模式是一种常见的设计模式,它允许我们在不修改原有对象的基础上,对对象的行为进行增强。代理模式的核心思想是通过代理对象来控制对原始对象(也称为委托...

    代理模式的各种实现 (动态代理、静态代理)

    代理模式在Java中主要有两种实现方式:静态代理和动态代理,其中动态代理又分为JDK动态代理和CGlib代理。 1. 静态代理 静态代理是程序员手动创建代理类并实现与目标类相同接口的方式。在静态代理中,代理类和目标类...

    动态代理及静态代理及ssh整合

    静态代理是手动创建的代理类,它通常与被代理类位于同一个包下,并且实现相同的接口。在这个过程中,我们需要为每个需要代理的对象创建一个对应的代理类。代理类除了实现接口的方法外,还会包含额外的逻辑,如日志...

    JDK动态代理 spring aop 的原理

    Spring AOP(面向切面编程)则是一种流行的应用框架,它利用动态代理来实现对业务代码的切面增强,如日志、事务管理等。现在让我们深入探讨JDK动态代理和Spring AOP的原理。 首先,JDK动态代理基于Java的反射机制,...

    Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)

    Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...

    代理模式(含动态代理讲解)【Spring AOP实质】

    在静态代理中,我们需要手动创建一个代理类,这个代理类实现了与目标类相同的接口。代理类中会持有目标对象的引用,并在调用目标对象方法之前或之后添加额外的操作。这种方式的缺点是当目标类接口增加时,代理类也...

    Java 代理 代理模式 静态代理与动态代理 常见的动态代理实现 .md

    静态代理与动态代理的区别 代理模式可以进一步细分为静态代理和动态代理。 - **静态代理**:在程序编译时就已经确定代理类的具体实现方式。这意味着每次需要代理不同的操作时,都需要修改代理类的代码,这违反了...

    Java Spring代理模式AOP-IOC分析

    代理模式可以分为静态代理和动态代理两种。静态代理是通过手动编写代理类来实现代理的,而动态代理则是通过使用代理工厂或代理类生成器来生成代理对象。 二、静态代理 静态代理是通过手动编写代理类来实现代理的。...

    springAop默认代理方式.zip

    1. **静态代理**:Spring AOP 提供了两种代理方式,一种是静态代理,另一种是动态代理。静态代理是在编译时就确定了代理类,这种代理方式通常通过实现相同接口的方式创建。然而,Spring AOP默认并不使用静态代理,...

    动态代理例子

    动态代理在Java编程中是一种非常重要的技术,它允许我们在运行时创建代理类,这些代理类可以作为原有类的“中间人”,在调用原始方法之前或之后执行额外的操作。这通常用于实现AOP(面向切面编程)的概念,如日志、...

Global site tag (gtag.js) - Google Analytics