`
隐形的翅膀
  • 浏览: 497393 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AOP 学习, ProxyFactory 学习三

AOP 
阅读更多
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会采用基于类的代理。

分享到:
评论

相关推荐

    aop的详细总结(包含例子)

    三、Spring AOP代理原理 Spring AOP通过两种类型的代理来实现: 1. JDK动态代理:适用于目标对象实现了接口的情况,性能较低,需要定义代理接口。 2. CGLIB代理:可以代理接口和非final类,性能较高,通过生成字节码...

    spring-aop.rar_aop1270_spring_spring aop

    Spring AOP的核心类包括`org.springframework.aop.framework.ProxyFactoryBean`、`org.springframework.aop.framework.ProxyFactory`、`org.springframework.aop.aspectj.autoproxy.AspectJAutoProxyCreator`等。...

    springAOP核心组件分析

    3. 优先级排序:Spring通过实现PriorityOrdered接口和Ordered接口对BeanPostProcessor进行优先级排序。首先注册实现了PriorityOrdered接口的BeanPostProcessor,然后是实现了Ordered接口的BeanPostProcessor,最后...

    小马哥讲 Spring AOP 编程思想 - API 线索图.pdf

    3. AOP的配置和代理对象的创建 - **容器(1对1关联)**:此处可能指的是Spring IoC容器与AOP配置的一对一关联。 - **PointcutAdvisor(切点通知器)**:一个组合了Pointcut和Advice的接口,用于将切点和通知结合在...

    SpringAOP

    Spring支持三种织入方式:编译时织入(如AspectJ)、类加载时织入(如CGLIB)和运行时织入(动态代理)。 在Spring中实现AOP,一般有两种方式: - **基于接口的动态代理**:如果目标类实现了接口,Spring会使用JDK...

    spring aop

    #### 三、AOP 实现机制 Spring 提供了两种 AOP 的实现方式: 1. **Spring 自带的 AOP**: - 使用 `ProxyFactoryBean` 来创建代理对象。 - 配置文件中定义代理对象,设置目标对象和通知。 - 通过 `target` 属性...

    第四章:Spring AOP API 设计模式1

    3. **工厂方法模式(Factory Method)**:Spring AOP中的`ProxyFactory`是一个典型的工厂方法模式实现,它根据不同的条件创建不同的代理对象,将实例化推迟到子类,提供了更大的灵活性。 4. **原型模式(Prototype...

    个人用java动态代理模拟实现spring aop

    - `Proxy.newProxyInstance()`方法用于创建代理对象,它需要三个参数:类加载器、目标对象所实现的接口列表以及一个InvocationHandler实例。 - `InvocationHandler`接口定义了`invoke()`方法,这个方法会在代理...

    AOP 和 Aspect 注解切入 测试 Demo

    1.ProxyFactory 基于 MethodBeforeAdvice、AfterReturningAdvice 利用 Spring Api 定义前、后置处理方法,并通过代理工厂类获取代理对象(代码或Xml配置实现) 2.ProxyFactoryBean 显式地设置 Advisors、Advice、...

    spring-aop-ProxyFactoryBean 源码分析

    3. **代理创建过程**: - 当`ProxyFactoryBean`被Spring容器初始化时,它会根据配置创建一个`AopProxy`实例。`AopProxy`是Spring AOP的核心,它负责实际的代理行为。 - `AopProxy`根据`ProxyFactoryBean`的配置...

    第二章:Spring AOP 基础1

    - 使用`org.springframework.aop.framework.ProxyFactory`等接口来手动配置和创建包含通知的代理。 8. **动态代理**: - Spring AOP支持自动动态代理,根据需要创建代理实例。 9. **TargetSource替换**: - ...

    spring AOP 概念

    - **Spring AOP 的织入机制**:由 ProxyFactory 或 ProxyFactoryBean 在运行时自动完成。 ##### Target(目标对象) - **定义**:需要应用 Aspect 功能的对象。 - **实例化**:通常是一个具体的 Java 对象。 ####...

    AOP实现计算器代码.zip

    使用ProxyFactory或ProxyFactoryBean实现计算器功能,同时(1)日志功能:在程序执行期间追踪正在发生的活动(打印出调用的方法,以及参数的参数值);(2)验证功能:希望计算器只能处理正数的运算,当有负数参与...

    Spring AOP 自动代理源码 DefaultAdvisorAutoProxyCreator

    Spring AOP源码02:ProxyFactory Spring AOP源码03:JdkDynamicAopProxy Spring AOP源码04:MethodInvocation 拦截器调用 Spring AOP源码05:DefaultAdvisorAutoProxyCreator Spring期末考压轴题:当Spring AOP遇上...

    Spring_0300_JDKProxy

    在Spring中,`org.springframework.aop.framework.ProxyFactoryBean`或`org.springframework.aop.framework.ProxyFactory`可以用来创建JDK代理对象。 下面是一段简单的示例代码,展示了如何使用Spring的JDK动态代理...

    如何使用Spring AOP的通知类型及创建通知

    使用`ProxyFactory`或`AopProxyFactoryBean`来创建代理,并将通知添加到代理工厂中。 总结起来,Spring AOP的通知类型提供了灵活的扩展机制,使得我们可以在不修改业务代码的前提下,实现如日志记录、事务管理、...

    Spring源码学习十二:@Transactional是如何工作的1

    进入 ProxyFactory.getProxy 方法。createAopProxy 方法决定使用 JDK 还是 Cglib 创建代理对象。可以看出,默认是使用 JDK 动态代理创建代理对象,如果目标类是接口,则使用 JDK 动态代理,否则使用 Cglib。 在这里...

    spring 总结.pdf

    ### Spring AOP 源码深度剖析 #### 一、Spring AOP 介绍与核心概念 Spring AOP(面向切面编程)是Spring框架提供的一个强大的功能模块,...理解和掌握这些核心原理对于深入学习Spring框架及其高级特性具有重要意义。

    SPRING对动态代理的封装

    - `org.springframework.aop.framework.ProxyFactory`:这是一个非bean工厂类,提供了与`ProxyFactoryBean`相似的功能,但不依赖于IoC容器。 - `org.springframework.aop.framework.Advised`:这个接口定义了对代理...

Global site tag (gtag.js) - Google Analytics