使用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实现。如果目标类实现了接口,使用JDK动态代理;否则,使用CGLIB生成子类作为代理。 - **切点(Pointcut)**:定义连接点的筛选规则,通过表达式或注解来...
Spring AOP基于代理实现,可以使用接口代理(JDK动态代理)或类代理(CGLIB)。 7. CGLIB: CGLIB是Spring AOP默认的代理库,用于生成目标类的子类,从而实现方法拦截。当目标类没有实现接口时,Spring会使用CGLIB...
**Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...
SSH笔记主要围绕的是Spring框架中的AOP(面向切面编程)特性进行讲解,结合了动态代理和基于注解的配置方式。AOP是Spring框架的一个重要组成部分,它提供了一种模块化和解耦代码的方式,使得我们可以将关注点分离到...
这篇“学习Spring笔记_AOP_Annotation实现和XML实现”主要探讨了如何在Spring中利用注解和XML配置来实现AOP的概念。 AOP,全称Aspect-Oriented Programming,是一种编程范式,旨在将关注点分离,让开发者可以更专注...
【Spring AOP源码笔记】 Spring AOP是Spring框架的核心组件之一,它实现了面向切面编程(Aspect-Oriented Programming,简称AOP),允许开发者定义“切面”,这些切面可以封装横切关注点,如日志记录、事务管理等。...
- **动态代理**:在运行时创建,Spring支持JDK动态代理和CGLIB动态代理,可以为任何类创建代理,即使它没有实现接口。 在Spring AOP中,配置切面主要是在`applicationContext.xml`配置文件中完成,或者使用注解式...
在本篇Spring学习笔记中,我们将深入探讨如何利用Spring框架的注解方式来实现面向切面编程(AOP)。AOP是一种编程范式,它允许我们定义横切关注点,如日志、事务管理等,然后将这些关注点模块化并插入到应用程序的多...
5. **代理(Proxy)**:Spring AOP通过JDK动态代理或CGLIB代理来创建一个目标对象的代理,以便在调用目标方法时插入通知。 实际操作中,我们可以使用注解来声明切面,例如`@Aspect`、`@Before`、`@After`等,也可以...
### Spring学习笔记:深入理解AOP与Annotation驱动的动态代理 #### 核心知识点解析: 在探讨Spring框架中AOP(面向切面编程)及基于Annotation的动态代理之前,我们首先需要了解AOP的基本概念及其在Spring中的实现...
配置CGLIB在Spring中的使用,一般不需要额外的配置,因为Spring默认会自动选择CGLIB或JDK动态代理,取决于目标类是否实现了接口。如果你想要显式指定使用CGLIB,可以在XML配置中加入以下代码: ```xml <aop:config>...
在本篇Spring学习笔记中,我们将深入探讨动态代理模式,并结合Spring框架的实现进行分析演示。动态代理模式是Java编程中一种重要的设计模式,它允许我们在不修改原对象代码的情况下,为对象添加额外的功能或行为。...
AOP代理有两种实现方式:JDK动态代理和CGLIB。前者针对实现了接口的类,后者则在没有接口的情况下通过子类化目标类实现。源码中,Advised接口和ProxyFactoryBean扮演着关键角色。 在数据访问/集成方面,Spring提供...
Spring 支持代理模式实现 AOP,可以是 JDK 动态代理或 CGLIB 代理。 ### Spring 源码分析 深入理解 Spring 源码有助于我们更好地利用和定制框架。例如,`DefaultListableBeanFactory` 类是 BeanFactory 的实现,...
综上所述,这个学习笔记可能详细讲解了Spring AOP的概念、实现方式,特别是CGLIB代理的工作原理,并且提供了一个实际的测试案例,帮助读者深入理解并掌握这些技术。通过学习这部分内容,开发者可以更好地利用Spring ...
【标题】"Spring学习笔记(八)"主要涵盖了Spring框架中的动态代理机制,这是Spring AOP(面向切面编程)的核心技术之一。动态代理允许我们在不修改原有代码的情况下,为对象添加额外的功能,如日志、事务管理等。在这...
在Spring中,AOP通过代理模式实现,可以是JDK动态代理(接口实现)或CGLIB代理(类继承)。 2. **切面(Aspect)**:切面是关注点的模块化,如日志、事务管理等,它结合了通知和切点。 3. **通知(Advice)**:...
- **动态代理**:Spring AOP通过动态代理技术实现切面,包括JDK动态代理和CGLIB代理。 **AOP配置** - **注解方式**:使用@Aspect,@Before,@After等注解定义切面、通知和切入点表达式。 - **XML方式**:在配置...
总结,Spring学习笔记(七)的重点是讲解了Spring中的代理模式,包括静态代理和动态代理的概念,以及如何在AOP中应用这些代理来增强功能。通过理解这些知识,你可以更好地掌握Spring框架,提升在实际开发中的能力。
在本篇Spring学习笔记中,我们将深入探讨Spring框架的核心特性,包括依赖注入(Dependency Injection,DI)、AOP(面向切面编程)以及Spring的源码解析,同时也会介绍一些实用的开发工具。通过学习这些内容,我们...