package com.albert.spring.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class JdkProxy implements InvocationHandler
{
private Object target;
public Object createTarget(Object target)
{
this.target = target;
/****
* 参数
* 1.目标对象的类装载器
* 2目标对象的接口
* 3回调对象
* 生成的代理对象要执行方法时就是依靠这个回调对象的invoke方法来进行目标对象的方法回调
*/
return Proxy.newProxyInstance(this.target.getClass().getClassLoader(),
this.target.getClass().getInterfaces(),
this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
StudentDaoImpl udi = (StudentDaoImpl)target;
Object result = null;
if (udi.getName() != null)
{
result = method.invoke(target, args);
}
else
{
System.out.println("name is null, can't add stduent ");
}
return result;
}
public static void main(String[] args)
{
JdkProxy jdk = new JdkProxy();
/****
* JDK的Proxy实现代理要求被代理的目标对象必须实现一个接口,
* 而如果目标对象没有实现接口则不能使用Proxy来代理
*/
StudentDao<Student> studentDaoImpl = (StudentDao<Student>)jdk.createTarget(new StudentDaoImpl());
studentDaoImpl.addStudent();
}
}
分享到:
相关推荐
JdkProxy.java
通过JDK Proxy,我们可以在运行时创建一个接口的实现类,并在调用接口方法时插入自定义的处理逻辑,这就是AOP的核心思想——“织入”(Weaving)。下面我们将详细讲解如何使用JDK Proxy实现Aop。 首先,我们需要...
标题"Spring_0300_JDKProxy"暗示我们将讨论Spring如何使用JDK的Proxy类来实现动态代理。在Spring中,`org.springframework.aop.framework.ProxyFactoryBean`或`org.springframework.aop.framework.ProxyFactory`可以...
自己写的小例子,供学习参考。 public class StaticProxy implements Hello{ private HelloSpecker helloSpecker; public StaticProxy() { } public StaticProxy(HelloSpecker helloSpecker) { ...
针对标题"mybatis_jdk_proxy.zip",我们可以推断这是一个关于MyBatis框架使用Java JDK代理(JDK Proxy)的相关学习资料。下面将详细解释这个主题。 MyBatis是一个流行的持久层框架,它允许开发者通过简单的XML或...
本示例"JDKProxy"着重于对比两种常见的动态代理技术:JDK的接口代理和CGLIB的类代理。这两种代理方式在Java应用程序中都有广泛的应用,例如在AOP(面向切面编程)框架如Spring中。 首先,我们来深入了解一下JDK的...
proxy,jdkproxy-transaction,jdkproxy-salary,day02-itheima11-spring-08-cglibproxy,day02-itheima11-spring-09-aop.xml,day02-itheima11-spring-10-aop.xml.advice,day02-itheima11-spring-11-aop.xml.exception等...
JDK Proxy是Java提供的一种动态代理机制,它允许我们在运行时创建一个实现了特定接口的新类。这个新类可以作为原有接口的代理,从而在调用接口方法时插入自定义的逻辑。在Spring AOP中,如果目标对象实现了至少一个...
- **基于JDK Proxy的AOP**:当被代理的目标类实现了接口时,Spring会使用JDK Proxy来创建代理对象。 - **基于CGLIB的AOP**:当被代理的目标类没有实现接口时,Spring会选择CGLIB创建代理对象。 #### 6. 示例代码 ...
Spring支持JDK Proxy和CGLIB两种方式实现AOP代理,对于实现了接口的类,优先使用JDK Proxy;对于未实现接口的类,Spring会自动切换到CGLIB。 在上述小明购买香水的例子中,我们可以看到: - 定义了一个`...
JDKProxy jdkProxy = new JDKProxy(userDao); UserDao proxyUserDao = (UserDao) jdkProxy.getProxyInstance(); proxyUserDao.saveUser(); } } ``` ### CGLIB 动态代理 CGLIB(Code Generation Library)是一...
pring源代码各个模块作用 核心模块: 1 spring-core:核心模块 依赖注入IOC和DI的最基本实现 ...spring-aop:面向切面编程,CGLB,JDKProxy spring-aspects:集成AspectJ,Aop应用框架 spring-instrume
静态代理--不适合企业开发,适合初学者理解代理。 jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口...spring 的AOP功能中 会根据目标类是否实现了接口来判断使用 jdk Proxy还是cglib
- JDK Proxy性能相对较慢,因为涉及到反射,而CGLIB通过字节码生成,性能更好。 - JDK Proxy易于理解和使用,CGLIB则需要更深入的字节码知识。 总之,CGLIB作为Java中的动态代理库,通过字节码技术为我们的代码...
### JDK动态代理(JDKProxy) JDK动态代理基于接口实现,它要求代理的目标对象必须实现至少一个接口。以下是对JDK动态代理的详细说明: 1. **Proxy类**:Proxy类是JDK提供的用于创建动态代理类的工具类。通过调用`...
package org.sg.sgg.mode.proxy.jdkProxy.trendProxy2; /** * java JDK实现动态代理 * @author * */ public class Test2 { public static void main(String[] args) { UserService userService = new ...
**AOP编程示例** ...CGlib和JDK Proxy是Spring在底层创建动态代理的两种方式,Spring注解AOP则简化了AOP的配置,提高了开发效率。理解并熟练运用这些技术,对于提高Java应用程序的设计质量和可维护性至关重要。
在提供的压缩包文件`jdkproxy`中,可能包含了示例代码或者更复杂的动态代理实现,例如,可能包含了多个接口、不同的`InvocationHandler`实现,或者展示了如何结合其他框架如Spring进行集成。通过对这些代码的分析和...
:JDK Proxy 使用 Java 反射机制,而 CGLib 使用字节码生成技术。 4. 什么是深克隆和浅克隆?:深克隆是完全复制对象,而浅克隆是只复制对象的引用。 5. 如何实现深克隆?:可以使用对象的 clone() 方法或序列化机制...
当目标类没有实现接口时,Java的标准动态代理机制JDK Proxy就无法工作,因为JDK Proxy是基于接口的。而CgLib则通过生成目标类的子类来实现动态代理,即使目标类没有接口,也可以进行代理。这使得CgLib在AOP(面向切...