我们在项目中大多使用的声明式的AOP配置,其实在spring中也提供了编程式的AOP实现方法,具体在ProxyFactory中例如ProxyFactory例子如下:
TargetImpl target = new TargetImpl();
ProxyFactory proxy = new ProxyFactory ();
target.addAdvisor(youAdvisor);
target.addAdvice(youAdvice);
TargetImpl targetproxy = proxy.getProxy();
proxyFactory类的源码如下:
public class ProxyFactory extends ProxyCreatorSupport
{
public ProxyFactory()
{
}
public ProxyFactory(Object target)
{
Assert.notNull(target, "Target object must not be null");
setInterfaces(ClassUtils.getAllInterfaces(target));
setTarget(target);
}
public ProxyFactory(Class proxyInterfaces[])
{
setInterfaces(proxyInterfaces);
}
public ProxyFactory(Class proxyInterface, Interceptor interceptor)
{
addInterface(proxyInterface);
addAdvice(interceptor);
}
public ProxyFactory(Class proxyInterface, TargetSource targetSource)
{
addInterface(proxyInterface);
setTargetSource(targetSource);
}
public Object getProxy()
{
return createAopProxy().getProxy();
}
public Object getProxy(ClassLoader classLoader)
{
return createAopProxy().getProxy(classLoader);
}
public static Object getProxy(Class proxyInterface, Interceptor interceptor)
{
return (new ProxyFactory(proxyInterface, interceptor)).getProxy();
}
public static Object getProxy(Class proxyInterface, TargetSource targetSource)
{
return (new ProxyFactory(proxyInterface, targetSource)).getProxy();
}
public static Object getProxy(TargetSource targetSource)
{
if(targetSource.getTargetClass() == null)
{
throw new IllegalArgumentException("Cannot create class proxy for TargetSource with null target class");
} else
{
ProxyFactory proxyFactory = new ProxyFactory();
proxyFactory.setTargetSource(targetSource);
proxyFactory.setProxyTargetClass(true);
return proxyFactory.getProxy();
}
}
}
proxyFactory的实现原理与ProxyFactoryBean的实现原理是一样的,只是在最外层的表示形式有所不同,proxyFactory没有使用proxyFactoryBean的IoC封装,而是通过直接继承ProxyCreatorSupport的功能来完成AOP的属性配置。
具体实例
/**
* 具体的拦截器类
*/
public class TestInterceptor implements MethodInterceptor
{
@Override
public Object invoke(MethodInvocation invocation) throws Throwable
{
System.out.print("zhangsan start.....");
Object retVal = invocation.proceed();
System.out.print("end");
return retVal;
}
}
//具体业务类
public class Loginservice
{
public void login()
{
System.out.println("this is login method");
}
}
//测试类
public class Test
{
public static void main(String[] args)
{
//具体的业务逻辑
Loginservice loginservice = new Loginservice();
//代理工厂
ProxyFactory pf = new ProxyFactory(loginservice);
//添加advice
pf.addAdvice(new TestInterceptor());
//产生代理对象
Loginservice lg = (Loginservice) pf.getProxy();
lg.login();
}
}
这只是简单的通过编码完成了spring的AOP功能。
分享到:
相关推荐
在讨论Spring AOP(面向切面编程)时,首先需要理解几个核心概念。Spring AOP 是Spring框架提供的一个功能模块,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中解耦出来,通过在方法调用前后进行...
3. **工厂方法模式(Factory Method)**:Spring AOP中的`ProxyFactory`是一个典型的工厂方法模式实现,它根据不同的条件创建不同的代理对象,将实例化推迟到子类,提供了更大的灵活性。 4. **原型模式(Prototype...
Spring AOP的核心类包括`org.springframework.aop.framework.ProxyFactoryBean`、`org.springframework.aop.framework.ProxyFactory`、`org.springframework.aop.aspectj.autoproxy.AspectJAutoProxyCreator`等。...
最后,通过Spring的ProxyFactory创建代理对象,配置Advice,运行客户端代码,实现了在调用sayHello()前后插入自定义的行为。 需要注意的是,Spring AOP的实现并不局限于Eclipse环境,它可以在任何Java环境中使用。...
Spring AOP(面向切面编程)是Spring框架的一个重要组成部分,它通过预定义的切点(Pointcut)来拦截方法的调用,并将横切关注点(如日志、事务管理等)与业务逻辑分离。本知识点将围绕Spring AOP的核心组件进行分析...
<bean id="proxyFactory" class="org.springframework.aop.framework.ProxyFactoryBean"> <value>beforeAdvice <value>afterReturningAdvice ``` 2. **AspectJ**: - 是 Java 社区中最流行且功能...
- 使用`org.springframework.aop.framework.ProxyFactory`等接口来手动配置和创建包含通知的代理。 8. **动态代理**: - Spring AOP支持自动动态代理,根据需要创建代理实例。 9. **TargetSource替换**: - ...
Java动态代理是Java提供的一种在运行时创建新类型对象的技术,它可以让我们在不修改原有代码的情况下,对方法的调用进行增强,这正是Spring AOP(面向切面编程)的核心思想。Spring AOP通过代理模式实现了对业务逻辑...
在Spring框架中,AOP(面向切面编程)是一个核心特性,它允许我们在不修改代码的情况下,对程序的行为进行统一的管理和控制。`ProxyFactoryBean`是Spring AOP实现中的一个重要类,它用于创建代理对象,使我们能够...
- **Spring AOP 的织入机制**:由 ProxyFactory 或 ProxyFactoryBean 在运行时自动完成。 ##### Target(目标对象) - **定义**:需要应用 Aspect 功能的对象。 - **实例化**:通常是一个具体的 Java 对象。 ####...
5. Weaving(编织):将切面应用到目标对象的过程,Spring AOP在运行时完成这个过程,通过ProxyFactory或ProxyFactoryBean。 二、AOP种类 1. 静态织入:在编译时完成,如AspectJ。 2. 动态织入:运行时进行,Spring...
Spring AOP源码02:ProxyFactory Spring AOP源码03:JdkDynamicAopProxy Spring AOP源码04:MethodInvocation 拦截器调用 Spring AOP源码05:DefaultAdvisorAutoProxyCreator Spring期末考压轴题:当Spring AOP遇上...
使用`ProxyFactory`或`AopProxyFactoryBean`来创建代理,并将通知添加到代理工厂中。 总结起来,Spring AOP的通知类型提供了灵活的扩展机制,使得我们可以在不修改业务代码的前提下,实现如日志记录、事务管理、...
动态代理是Spring实现AOP功能的关键技术之一,它允许我们无需修改原有代码就能添加额外的功能或行为。这篇博客将深入探讨Spring如何封装动态代理,并介绍相关的核心概念和实现细节。 首先,我们要理解什么是动态...
- **使用ProxyFactory创建AOP代理**:另一种创建AOP代理的方式。 - **操作被通知的对象**:如何访问被代理的对象。 - **使用auto-proxy功能**:Spring自动代理机制。 - **事务管理** - **事务管理介绍**:...
### Spring AOP 源码深度剖析 #### 一、Spring AOP 介绍与核心概念 Spring AOP(面向切面编程)是Spring框架提供的一个强大的功能模块,它支持通过预编译方式和运行期动态代理实现AOP。在Spring框架中,AOP的核心...
7.7. 使用ProxyFactory通过编程创建AOP代理 7.8. 操作被通知对象 7.9. 使用“自动代理(autoproxy)”功能 7.9.1. 自动代理bean定义 7.9.1.1. BeanNameAutoProxyCreator 7.9.1.2. DefaultAdvisorAutoProxyCreator ...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员定义横切关注点,并将这些关注点与应用程序的业务逻辑分离。在本篇笔记中,我们将深入探讨Spring AOP的核心流程,特别是在目标方法执行时的拦截...
在Spring中,`org.springframework.aop.framework.ProxyFactoryBean`或`org.springframework.aop.framework.ProxyFactory`可以用来创建JDK代理对象。 下面是一段简单的示例代码,展示了如何使用Spring的JDK动态代理...
Spring AOP 是 Spring 框架中的一个核心特性,它实现了面向切面编程(AOP)的概念,使得开发者能够方便地处理系统中的横切关注点,例如事务管理、日志记录、性能监控等。AOP 的核心概念包括连接点、切点、增强、目标...