Spring随笔-ProxyFactoryBean
项目要用到对于权限的控制。想到Spring的AOP比较适合,所以翻阅了下Spring的原文档。发现了个ProxyFactoryBean。与大家分享下。
看这个类的名称第一感觉就是代理模式的应用。关于代理模式以后会写出来,这里不多说。在原文档中提到:如果有接口则要配置proxyInterfaces属性。看到复数形式就能猜到是个数组或是集合。如果没有实现接口,也能处理。就要借助CGLIB类库直接操作.class文件。提到代理,肯定就要有被代理的对象,target属性配置被代理的对象。
注意:被代理的对象应该被IOC容器管理。
interceptorNames属性用于配置代理类。复数形式同样表示是数组或集合,并且对象也被IOC容器管理。
注意:如果没有实现接口,想借助CGLIB类库操作。那么需要配置proxyTargetClass属性并且属性value=”true”.
代码如下:
applicationContext.xml配置如下:
<!-- 使用JDK自带的动态代理,被代理的类必须要实现一个接口 -->
<bean id="loginInterceptor" class="com.xt.right.spring.LoginInterceptor"></bean>
<bean id="loginTarget" class="com.xt.right.LoginManagermentImpl"></bean>
<bean id="login" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.xt.right.ILoginManager</value>
</property>
<property name="interceptorNames">
<list>
<value>loginInterceptor</value>
</list>
</property>
<property name="target">
<ref bean="loginTarget" />
</property>
</bean>
<!-- 使用CGLIB实现动态代理,被代理的类不需要实现接口。直接操作.class文件 -->
<bean id="loginTarget2" class="com.xt.right.LoginManager2"></bean>
<bean id="loginInterceptor2" class="com.xt.right.spring.CGLIBLoginInterceptor"></bean>
<bean id="login2" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyTargetClass" value="true">
</property>
<property name="target">
<ref bean="loginTarget2" />
</property>
<property name="interceptorNames">
<list>
<value>loginInterceptor2</value>
</list>
</property>
</bean>
代理类:实现了MethodInterceptor接口中的invoke方法.arg0.getArguments()得到所有的参数。
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class CGLIBLoginInterceptor implements MethodInterceptor {
public Object invoke(MethodInvocation arg0) throws Throwable {
String name = (String)arg0.getArguments()[0];
if (name.equals("flash")) {
System.out.println("这才是真正的用户! ");
return arg0.proceed();
} else {
System.out.println("非法的用户~~~ ");
return null;
}
}
}
被代理类:
public class LoginManager2 {
public void login(String name) {
System.out.println("欢迎 " + name + "登陆!");
}
}
分享到:
相关推荐
`ProxyFactoryBean`是Spring AOP实现中的一个重要类,它用于创建代理对象,使我们能够实现动态代理以进行方法拦截。下面将深入分析`ProxyFactoryBean`的源码,探讨其工作原理和使用方式。 `ProxyFactoryBean`继承自...
而`org.springframework.aop.framework.ProxyFactoryBean`则实现了AOP代理,通过动态代理机制,使得可以在不修改原始代码的情况下,添加新的行为。 此外,Spring的事务管理(`org.springframework.transaction`包)...
在源码中,`org.springframework.aop`和`org.springframework.aop.framework`包下的类,如`AspectJExpressionPointcut`、`AdvisedSupport`和`ProxyFactoryBean`等,是用来实现AOP的关键。 **源码注释**: 这个...
在AOP部分,`org.springframework.aop.framework.ProxyFactoryBean`用于创建代理对象,实现切面功能。 Spring框架还支持注解驱动开发,如`@Autowired`用于自动装配依赖,`@Service`、`@Repository`和`@Controller`...
`org.springframework.aop`包下包含了AOP的核心实现,如`Advised`接口和`ProxyFactoryBean`类。 二、数据访问支持 1. **JDBC抽象层**:Spring提供了对JDBC的简化封装,通过`JdbcTemplate`和`SimpleJdbcTemplate`,...
在1.0-rc1版本中,Spring通过代理模式实现了AOP,主要体现在`org.springframework.aop`包下的类,如`ProxyFactoryBean`和`AspectJAdvice`等。 3. **数据访问支持**:Spring 1.0-rc1对JDBC进行了封装,提供了一套...
源码中,`AspectJ`相关的类实现了切面的创建和应用,`ProxyFactoryBean`和`AspectJAutoProxyCreator`则用于生成代理对象,实现切面的功能。 四、Web MVC `spring-webmvc`模块是Spring Web应用程序的核心。`...
`Aspect`、`Pointcut`和`Advice`是AOP中的关键概念,通过`ProxyFactoryBean`或`AspectJAutoProxyCreator`等工具,Spring可以创建代理对象,实现切面的织入。 另外,Spring MVC作为Web开发的重要部分,位于`org....
`org.springframework.aop`包包含了许多与AOP相关的类,如`Advisor`、`Pointcut`、`ProxyFactoryBean`等,这些是实现切面的核心组件。 3. **数据访问集成**:Spring支持多种数据访问技术,如JDBC、ORM(对象关系...
主要类如`org.springframework.aop.framework.ProxyFactoryBean`和`org.springframework.aop.aspectj.AspectJExpressionPointcut`展示了切面的创建和匹配逻辑。 5. **数据访问集成** "spring-jdbc"和"spring-orm...
它包括了ProxyFactoryBean和AspectJ的集成。 5. **spring-expression.jar (SPeL)**:Spring表达式语言,提供了一种强大而灵活的方式来在运行时查询和操作对象图,常用于配置和动态数据绑定。 6. **spring-jdbc.jar...
- **ProxyFactoryBean**:Spring AOP中的代理工厂Bean,用于创建代理对象。 #### 六、实战示例:模拟Warcraft游戏 - **示例简介**:通过一个模拟游戏的例子来演示如何使用Spring AOP来处理游戏中的横切关注点。 - *...
3. AOP代理(AOP Proxy):在`org.springframework.aop`包中,ProxyFactoryBean和AspectJAutoProxyCreator是实现AOP的关键类。它们创建代理对象,拦截方法调用并执行相应的切面逻辑。 4. MVC组件:`org.spring...
- **AOP代理**:探索`ProxyFactoryBean`和`AspectJAutoProxyCreator`,了解基于代理的AOP实现。 - **事件发布**:研究`ApplicationEventPublisher`接口,掌握事件驱动的实现机制。 - **数据访问抽象**:分析`...
对于AOP,可以查看`ProxyFactoryBean`和`AdvisedSupport`类,它们负责创建代理对象并实现切面的织入。Spring MVC的部分,如`DispatcherServlet`和`HandlerMapping`,则展示了如何处理HTTP请求并调用合适的处理器方法...
在5.2.0.RELEASE版本中,`org.springframework.aop` 和 `org.springframework.aop.framework` 包内的类和接口,如`Advisor`、`Pointcut`、`ProxyFactoryBean`等,是AOP的核心组成部分。通过定义切面、切入点表达式和...
在 Spring 1.2.8 的源代码中,可以研究 `org.springframework.aop` 包,找到 `Advisor` 和 `Pointcut` 接口,以及 `ProxyFactoryBean` 类,这些都是实现AOP的关键组件。 此外,Spring 还包括对数据库操作的支持,如...
spring-aop.jar包含了这些代理机制的相关类,如`org.springframework.aop.framework.ProxyFactoryBean`,它是创建代理对象的工厂。 2. **切面(Aspect)**:切面是AOP的核心概念,它封装了关注点的逻辑。在Spring中...