使用JDK代理,代理对象必须实现一接口
com.spring305.test.aop.dao.UserDao.java
public interface UserDao {
void print1();
void print2();
}
实现方法:com.spring305.test.aop.dao.impl.UserDaoImpl.java
public class UserDaoImpl implements UserDao {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public UserDaoImpl(String name){
this.name = name;
}
@Override
public void print1() {
System.out.println(UserDaoImpl.class.toString()+" print1()");
}
@Override
public void print2() {
System.out.println(UserDaoImpl.class.toString()+" print2()");
}
}
com.spring305.test.aop.dao.ProxyFactory.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import com.spring305.test.aop.dao.impl.UserDaoImpl;
public class ProxyFactory implements InvocationHandler {
private Object target;
public Object createUserDaoImp(Object target){
this.target = target;
return Proxy.newProxyInstance(this.target.getClass().getClassLoader(), this.target.getClass().getInterfaces(),this);
}
@Override
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {
UserDaoImpl udImpl = (UserDaoImpl)target;
Object result = null;
if(udImpl.getName() == null){//name属性为空时才调用
result = arg1.invoke(target, arg2);
}
return result;
}
}
测试代码:
@Test //用户名为空,不执行方法
public void testProxy(){
ProxyFactory pf=new ProxyFactory();
UserDao ud=(UserDao) pf.createUserDaoImp(new UserDaoImpl(null));
ud.print1();
}
@Test //用户名为不为空,才执行save方法
public void testProxy2(){
ProxyFactory pf=new ProxyFactory();
UserDao ud=(UserDao) pf.createUserDaoImp(new UserDaoImpl("张某"));
ud.print2();
}
分享到:
相关推荐
spring之AOP(动态代理),包括jdk动态代理和CGLib动态代理
Spring-AOP-利用java中的动态代理和Spring的拦截器做到AOP
主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...
Spring AOP 使用的动态代理主要有两种方式:JDK 动态代理和 CGLIB 代理。 JDK 动态代理:用于代理实现了接口的类。Spring 会使用 java.lang.reflect.Proxy 类来创建代理对象。 CGLIB 代理:用于代理没有实现接口的...
Spring_AOP笔记Spring_AOP笔记Spring_AOP笔记Spring_AOP笔记Spring_AOP笔记Spring_AOP笔记Spring_AOP笔记
基于JDK的动态代理。必须是面向接口的,只有实现了具体接口的类才能生成代理对象
spring aop jdk 动态代理的底层实现解析模拟
死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序
Jdk动态代理,基于接口的代理示例 InovactionHandler Proxy
spring3 spring-aop chm 类图
AOP的意思就是面向切面编程。本文主要是通过梳理JDK中自带的反射机制,实现 AOP动态代理模式,这也是Spring AOP 的实现原理
使用Spring配置文件实现AOP
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop
Spring框架是一个开放源代码的J2EE应用程序框架,是对bean的生命周期进行管理的轻量...Spring框架主要由七部分组成,分别是Spring Core,Spring AOP,Spring ORM,Spring DAO,Spring Context,Spring Web和Spring Web MVC。
aspectj-1.7.4.jar,aspectjweaver-1.7.4.jar
使用jdk proxy实现aop机制的一个小例子,写着给新手看看而已,老手们莫见笑
AOP之JDK动态代理和CGLib动态代理 ,具体效果和过程看博文 http://blog.csdn.net/evankaka/article/details/45195383
JavaEE spring半自动实现AOP代理
李君老师JavaEE笔记-SpringAop