针对spring的基本用途,就不多说明了,加载bean的时候需要用到代理,spring的基本代理是jdk和cglib动态代理,区别网上也有说的比较全面的,这里我就copy url
http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html
这篇不错,其中有个地方说的不错:
JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。
package net.battier.dao;
public interface BookFacade {
public void addBook();
}
jdk动态代理:
package net.battier.dao.impl;
import net.battier.dao.BookFacade;
public class BookFacadeImpl implements BookFacade {
@Override
public void addBook() {
System.out.println("增加图书方法。。。");
}
}
、BookFacadeProxy.java
package net.battier.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* JDK动态代理代理类
*
* @author student
*
*/
public class BookFacadeProxy implements InvocationHandler {
private Object target;
/**
* 绑定委托对象并返回一个代理类
* @param target
* @return
*/
public Object bind(Object target) {
this.target = target;
//取得代理对象
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this); //要绑定接口(这是一个缺陷,cglib弥补了这一缺陷)
}
@Override
/**
* 调用方法
*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result=null;
System.out.println("事物开始");
//执行方法
result=method.invoke(target, args);
System.out.println("事物结束");
return result;
}
}
cglib动态代理
是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。
:
package net.battier.dao.impl;
/**
* 这个是没有实现接口的实现类
*
* @author student
*
*/
public class BookFacadeImpl1 {
public void addBook() {
System.out.println("增加图书的普通方法...");
}
}
分享到:
相关推荐
Java Spring代理模式AOP-IOC分析 一、代理模式概述 在软件设计中,代理模式是一种常用的设计模式。它可以在不修改原始代码的情况下,扩展或修改原始对象的行为。代理模式可以分为静态代理和动态代理两种。静态代理...
本文将深入探讨Spring代理模式的工作原理,并通过实际示例来帮助理解。 一、Spring代理模式概述 代理模式是一种设计模式,它允许我们在不修改原有对象的基础上,在调用目标对象的方法前后增加额外的功能。在Spring...
在"spring代理实现项目"中,可能会有专门的代理类为具体业务逻辑提供额外的服务,如事务管理、日志记录等。 2. 动态代理: 动态代理则是在运行时动态创建代理对象,不需要预先编写代理类。在Java中,可以使用`java....
在深入探讨Spring代理机制之前,我们首先应当理解代理(Proxy)模式的基本概念。代理模式是一种设计模式,它为一个对象提供一个替代或占位符,以便控制对这个对象的访问。在Spring框架中,代理机制主要用于实现AOP...
Java Spring 代理模式 AOP-IOC 结合 从给定的文件信息中,我们可以总结出以下知识点: 一、为什么需要代理模式 在软件开发中,我们经常会遇到一些非功能性需求,如日志记录、身份验证、性能监控等,这些需求会...
Spring框架中的代理实现是面向切面编程(AOP)的核心机制之一,它允许我们在不修改原有代码的情况下,为对象添加额外的功能。在这个资源中,我们可能会看到三种不同的代理方式:JDK动态代理、CGLIB代理以及Spring AOP...
spring代理
【Spring 代理Aop实现原理讲解】 在Spring框架中,AOP(面向切面编程)是一种重要的编程模型,它允许开发者定义“切面”,这些切面可以包含业务逻辑的某个部分,例如日志、事务管理等,然后在运行时自动插入到合适...
在Spring中,AOP代理有两种实现方式:JDK动态代理和CGLIB代理。JDK代理适用于实现了接口的类,而CGLIB代理则适用于未实现接口的类。 1. **JDK动态代理**: - Spring通过实现`java.lang.reflect.InvocationHandler`...
SPRING代理相关,有主理解SPRING的机制
在Spring框架中,自动代理是一种重要的特性,它允许我们在不修改原有代码的情况下,为bean添加额外的功能,如事务管理、AOP(面向切面编程)等。本篇将深入探讨如何利用Spring实现自动代理,特别是关注`...
在使用Spring时,我们可能会遇到一个术语——“二次代理”,这通常涉及到Spring AOP代理机制。本文将深入探讨Spring的二次代理原因以及如何进行问题排查。 首先,我们需要理解什么是代理。在AOP中,代理是Spring...
对于JDK动态代理,Spring会创建一个实现了目标类所有接口的代理类,这个代理类在调用目标方法时会插入AOP的切面逻辑,如事务处理、日志记录等。CGLIB则是通过继承目标类的方式创建代理对象,如果目标类没有定义接口...
2. **Struts1配置**:接着,需要在Struts的配置文件(struts-config.xml)中,将默认的RequestProcessor替换为我们定义的Spring代理RequestProcessor。这样,当Struts接收到HTTP请求时,就会调用我们自定义的代理...
在类上直接使用 @Transactional 注解,Spring 会创建基于类的代理,但是这种方式可能导致一些问题,例如:无法通过子类覆盖父类的方法来改变事务属性。 第五种方式:编程式事务管理 除了声明式事务管理,Spring 还...
Spring框架提供了一种便捷的方式来实现动态代理,这使得我们可以在不修改原有代码的情况下扩展或增强已有功能。在本篇中,我们将深入探讨Spring如何使用动态代理以及其在实际开发中的应用。 动态代理的核心概念是...
spring boot+spring mvc+spring代理请求**音乐接口获取数据,然后提供给**小程序做显示 运行环境 jdk8+IntelliJ IDEA+maven 项目技术(必填) spring boot+spring mvc+spring 数据库文件 无,通过**音乐接口获取...
在Spring框架中,代理代理是一种重要的机制,它允许我们在不修改原有对象代码的情况下,为对象增加额外的功能。这里我们探讨的“spring proxy代理模仿”主要指的是Spring AOP(面向切面编程)中的动态代理实现。...