ProxyFactory: 拦截没有接口的类
public class TaskImpl {
public void execute() {
System.out.println("run code to here");
}
}
//如果没有接口, 只能用CGLIB, 无论是否声明
pf.setProxyTargetClass(true);
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.support.NameMatchMethodPointcutAdvisor;
public class test2 {
public static void main(String[] args) {
TaskImpl target =new TaskImpl();
ProxyFactory pf=new ProxyFactory(target);
//pf.setProxyTargetClass(true);
NameMatchMethodPointcutAdvisor advisor = new NameMatchMethodPointcutAdvisor();
advisor.setMappedName("execute");
advisor.setAdvice(new MessageDecorator());
pf.addAdvisor(advisor);
TaskImpl task=(TaskImpl)pf.getProxy();
System.out.println(task.getClass());
task.execute();
}
}
结果
class TaskImpl$$EnhancerByCGLIB$$26cc62
hello
run code to here
end
总结
如果满足以下列出的三种情况中的任何一种,ProxyFactory将对目标类进行基于类的代理。
如果目标类没有实现任何接口,不管proxyTargetClass的值是什么,ProxyFactory会采用基于类的代理。
如果有接口并且ProxyFactory的proxyTargetClass属性值被设置为true,ProxyFactory会采用基于类的代理。
如果有接口并且ProxyFactory的optimize属性值被设置为true,ProxyFactory会采用基于类的代理。
分享到:
相关推荐
三、Spring AOP代理原理 Spring AOP通过两种类型的代理来实现: 1. JDK动态代理:适用于目标对象实现了接口的情况,性能较低,需要定义代理接口。 2. CGLIB代理:可以代理接口和非final类,性能较高,通过生成字节码...
Spring AOP的核心类包括`org.springframework.aop.framework.ProxyFactoryBean`、`org.springframework.aop.framework.ProxyFactory`、`org.springframework.aop.aspectj.autoproxy.AspectJAutoProxyCreator`等。...
3. 优先级排序:Spring通过实现PriorityOrdered接口和Ordered接口对BeanPostProcessor进行优先级排序。首先注册实现了PriorityOrdered接口的BeanPostProcessor,然后是实现了Ordered接口的BeanPostProcessor,最后...
3. AOP的配置和代理对象的创建 - **容器(1对1关联)**:此处可能指的是Spring IoC容器与AOP配置的一对一关联。 - **PointcutAdvisor(切点通知器)**:一个组合了Pointcut和Advice的接口,用于将切点和通知结合在...
Spring支持三种织入方式:编译时织入(如AspectJ)、类加载时织入(如CGLIB)和运行时织入(动态代理)。 在Spring中实现AOP,一般有两种方式: - **基于接口的动态代理**:如果目标类实现了接口,Spring会使用JDK...
#### 三、AOP 实现机制 Spring 提供了两种 AOP 的实现方式: 1. **Spring 自带的 AOP**: - 使用 `ProxyFactoryBean` 来创建代理对象。 - 配置文件中定义代理对象,设置目标对象和通知。 - 通过 `target` 属性...
3. **工厂方法模式(Factory Method)**:Spring AOP中的`ProxyFactory`是一个典型的工厂方法模式实现,它根据不同的条件创建不同的代理对象,将实例化推迟到子类,提供了更大的灵活性。 4. **原型模式(Prototype...
- `Proxy.newProxyInstance()`方法用于创建代理对象,它需要三个参数:类加载器、目标对象所实现的接口列表以及一个InvocationHandler实例。 - `InvocationHandler`接口定义了`invoke()`方法,这个方法会在代理...
1.ProxyFactory 基于 MethodBeforeAdvice、AfterReturningAdvice 利用 Spring Api 定义前、后置处理方法,并通过代理工厂类获取代理对象(代码或Xml配置实现) 2.ProxyFactoryBean 显式地设置 Advisors、Advice、...
3. **代理创建过程**: - 当`ProxyFactoryBean`被Spring容器初始化时,它会根据配置创建一个`AopProxy`实例。`AopProxy`是Spring AOP的核心,它负责实际的代理行为。 - `AopProxy`根据`ProxyFactoryBean`的配置...
- 使用`org.springframework.aop.framework.ProxyFactory`等接口来手动配置和创建包含通知的代理。 8. **动态代理**: - Spring AOP支持自动动态代理,根据需要创建代理实例。 9. **TargetSource替换**: - ...
- **Spring AOP 的织入机制**:由 ProxyFactory 或 ProxyFactoryBean 在运行时自动完成。 ##### Target(目标对象) - **定义**:需要应用 Aspect 功能的对象。 - **实例化**:通常是一个具体的 Java 对象。 ####...
使用ProxyFactory或ProxyFactoryBean实现计算器功能,同时(1)日志功能:在程序执行期间追踪正在发生的活动(打印出调用的方法,以及参数的参数值);(2)验证功能:希望计算器只能处理正数的运算,当有负数参与...
Spring AOP源码02:ProxyFactory Spring AOP源码03:JdkDynamicAopProxy Spring AOP源码04:MethodInvocation 拦截器调用 Spring AOP源码05:DefaultAdvisorAutoProxyCreator Spring期末考压轴题:当Spring AOP遇上...
在Spring中,`org.springframework.aop.framework.ProxyFactoryBean`或`org.springframework.aop.framework.ProxyFactory`可以用来创建JDK代理对象。 下面是一段简单的示例代码,展示了如何使用Spring的JDK动态代理...
使用`ProxyFactory`或`AopProxyFactoryBean`来创建代理,并将通知添加到代理工厂中。 总结起来,Spring AOP的通知类型提供了灵活的扩展机制,使得我们可以在不修改业务代码的前提下,实现如日志记录、事务管理、...
进入 ProxyFactory.getProxy 方法。createAopProxy 方法决定使用 JDK 还是 Cglib 创建代理对象。可以看出,默认是使用 JDK 动态代理创建代理对象,如果目标类是接口,则使用 JDK 动态代理,否则使用 Cglib。 在这里...
### Spring AOP 源码深度剖析 #### 一、Spring AOP 介绍与核心概念 Spring AOP(面向切面编程)是Spring框架提供的一个强大的功能模块,...理解和掌握这些核心原理对于深入学习Spring框架及其高级特性具有重要意义。
- `org.springframework.aop.framework.ProxyFactory`:这是一个非bean工厂类,提供了与`ProxyFactoryBean`相似的功能,但不依赖于IoC容器。 - `org.springframework.aop.framework.Advised`:这个接口定义了对代理...