今天整理复习一下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框架中,虽然动态代理(如JDK动态代理或CGLIB代理)更常见,因为它们可以自动创建代理对象,但静态代理也有其应用场景,特别是当需要在不依赖Spring的情况下,或者对性能有较高要求时。 要实现Spring框架下...
本资源主要涵盖了静态代理和动态代理两种常见类型的代理模式,以及Spring AOP中动态代理的三种配置方式。以下是详细的知识点解析: ### 静态代理 静态代理是程序员手动创建代理类并实现相同接口的方式。代理类和...
与静态代理相比,它不需要在编译阶段就定义好代理类,而是通过反射机制在运行时创建代理对象,这为系统带来了更高的灵活性和扩展性。在Spring框架中,动态代理主要用于AOP(面向切面编程)功能的实现,允许开发者在...
在Spring中,虽然静态代理可以手动实现,但更常见的是使用动态代理,如JDK的`java.lang.reflect.Proxy`或CGLIB库。动态代理在运行时根据接口或类动态生成代理对象,这使得代理对象的创建更加灵活,无需预先定义代理...
静态代理--不适合企业开发,适合初学者理解代理。 jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口,则没办法代理这个类。 cglib代理, 1.cglib(Code Generation Library)是一...
Spring AOP里的静态代理和动态代理用法详解 Spring AOP里的静态代理和动态代理用法详解是关于 Spring AOP里的静态代理和动态代理的详细介绍。代理是一种设计模式,通过创建一个代理对象来控制对委托类对象的直接...
主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...
【Spring AOP的静态代理和动态代理】 在软件开发中,代理模式是一种常见的设计模式,它允许我们在不修改原有对象的基础上,对对象的行为进行增强。代理模式的核心思想是通过代理对象来控制对原始对象(也称为委托...
代理模式在Java中主要有两种实现方式:静态代理和动态代理,其中动态代理又分为JDK动态代理和CGlib代理。 1. 静态代理 静态代理是程序员手动创建代理类并实现与目标类相同接口的方式。在静态代理中,代理类和目标类...
静态代理是手动创建的代理类,它通常与被代理类位于同一个包下,并且实现相同的接口。在这个过程中,我们需要为每个需要代理的对象创建一个对应的代理类。代理类除了实现接口的方法外,还会包含额外的逻辑,如日志...
Spring AOP(面向切面编程)则是一种流行的应用框架,它利用动态代理来实现对业务代码的切面增强,如日志、事务管理等。现在让我们深入探讨JDK动态代理和Spring AOP的原理。 首先,JDK动态代理基于Java的反射机制,...
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...
在静态代理中,我们需要手动创建一个代理类,这个代理类实现了与目标类相同的接口。代理类中会持有目标对象的引用,并在调用目标对象方法之前或之后添加额外的操作。这种方式的缺点是当目标类接口增加时,代理类也...
静态代理与动态代理的区别 代理模式可以进一步细分为静态代理和动态代理。 - **静态代理**:在程序编译时就已经确定代理类的具体实现方式。这意味着每次需要代理不同的操作时,都需要修改代理类的代码,这违反了...
代理模式可以分为静态代理和动态代理两种。静态代理是通过手动编写代理类来实现代理的,而动态代理则是通过使用代理工厂或代理类生成器来生成代理对象。 二、静态代理 静态代理是通过手动编写代理类来实现代理的。...
1. **静态代理**:Spring AOP 提供了两种代理方式,一种是静态代理,另一种是动态代理。静态代理是在编译时就确定了代理类,这种代理方式通常通过实现相同接口的方式创建。然而,Spring AOP默认并不使用静态代理,...
动态代理在Java编程中是一种非常重要的技术,它允许我们在运行时创建代理类,这些代理类可以作为原有类的“中间人”,在调用原始方法之前或之后执行额外的操作。这通常用于实现AOP(面向切面编程)的概念,如日志、...