`
xt00002003
  • 浏览: 21109 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring随笔-ProxyFactoryBean

    博客分类:
  • Java
阅读更多

Spring随笔-ProxyFactoryBean

   项目要用到对于权限的控制。想到SpringAOP比较适合,所以翻阅了下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 + "登陆!"); 

	}
}

 

分享到:
评论

相关推荐

    spring-aop-ProxyFactoryBean 源码分析

    `ProxyFactoryBean`是Spring AOP实现中的一个重要类,它用于创建代理对象,使我们能够实现动态代理以进行方法拦截。下面将深入分析`ProxyFactoryBean`的源码,探讨其工作原理和使用方式。 `ProxyFactoryBean`继承自...

    官方原版源码 spring-5.2.8.RELEASE.zip

    而`org.springframework.aop.framework.ProxyFactoryBean`则实现了AOP代理,通过动态代理机制,使得可以在不修改原始代码的情况下,添加新的行为。 此外,Spring的事务管理(`org.springframework.transaction`包)...

    spring-framework-5.2.0.RELEASE-master.zip

    在源码中,`org.springframework.aop`和`org.springframework.aop.framework`包下的类,如`AspectJExpressionPointcut`、`AdvisedSupport`和`ProxyFactoryBean`等,是用来实现AOP的关键。 **源码注释**: 这个...

    spring-framework-5.0.2.RELEASE-中文注释版-终极完美版.rar

    在AOP部分,`org.springframework.aop.framework.ProxyFactoryBean`用于创建代理对象,实现切面功能。 Spring框架还支持注解驱动开发,如`@Autowired`用于自动装配依赖,`@Service`、`@Repository`和`@Controller`...

    spring源码spring-framework-4.3.2.RELEASE

    `org.springframework.aop`包下包含了AOP的核心实现,如`Advised`接口和`ProxyFactoryBean`类。 二、数据访问支持 1. **JDBC抽象层**:Spring提供了对JDBC的简化封装,通过`JdbcTemplate`和`SimpleJdbcTemplate`,...

    spring-1.0-rc1.zip

    在1.0-rc1版本中,Spring通过代理模式实现了AOP,主要体现在`org.springframework.aop`包下的类,如`ProxyFactoryBean`和`AspectJAdvice`等。 3. **数据访问支持**:Spring 1.0-rc1对JDBC进行了封装,提供了一套...

    官方源码 spring-framework-5.3.3.zip

    源码中,`AspectJ`相关的类实现了切面的创建和应用,`ProxyFactoryBean`和`AspectJAutoProxyCreator`则用于生成代理对象,实现切面的功能。 四、Web MVC `spring-webmvc`模块是Spring Web应用程序的核心。`...

    spring-framework-5.2.25.RELEASE.zip

    `Aspect`、`Pointcut`和`Advice`是AOP中的关键概念,通过`ProxyFactoryBean`或`AspectJAutoProxyCreator`等工具,Spring可以创建代理对象,实现切面的织入。 另外,Spring MVC作为Web开发的重要部分,位于`org....

    spring-framework-4.3.7版本源码

    `org.springframework.aop`包包含了许多与AOP相关的类,如`Advisor`、`Pointcut`、`ProxyFactoryBean`等,这些是实现切面的核心组件。 3. **数据访问集成**:Spring支持多种数据访问技术,如JDBC、ORM(对象关系...

    编译好的spring-framework-3.2.8.RELEASE源码

    主要类如`org.springframework.aop.framework.ProxyFactoryBean`和`org.springframework.aop.aspectj.AspectJExpressionPointcut`展示了切面的创建和匹配逻辑。 5. **数据访问集成** "spring-jdbc"和"spring-orm...

    Spring3.0.5所有jar包及每个jar包作用说明文档

    它包括了ProxyFactoryBean和AspectJ的集成。 5. **spring-expression.jar (SPeL)**:Spring表达式语言,提供了一种强大而灵活的方式来在运行时查询和操作对象图,常用于配置和动态数据绑定。 6. **spring-jdbc.jar...

    spring2-aop入门实例教程

    - **ProxyFactoryBean**:Spring AOP中的代理工厂Bean,用于创建代理对象。 #### 六、实战示例:模拟Warcraft游戏 - **示例简介**:通过一个模拟游戏的例子来演示如何使用Spring AOP来处理游戏中的横切关注点。 - *...

    spring-framework-5.3.29.tar.gz

    3. AOP代理(AOP Proxy):在`org.springframework.aop`包中,ProxyFactoryBean和AspectJAutoProxyCreator是实现AOP的关键类。它们创建代理对象,拦截方法调用并执行相应的切面逻辑。 4. MVC组件:`org.spring...

    spring-framework-4.1.0.RELEASE

    - **AOP代理**:探索`ProxyFactoryBean`和`AspectJAutoProxyCreator`,了解基于代理的AOP实现。 - **事件发布**:研究`ApplicationEventPublisher`接口,掌握事件驱动的实现机制。 - **数据访问抽象**:分析`...

    Spring3.0.2-Source源码

    对于AOP,可以查看`ProxyFactoryBean`和`AdvisedSupport`类,它们负责创建代理对象并实现切面的织入。Spring MVC的部分,如`DispatcherServlet`和`HandlerMapping`,则展示了如何处理HTTP请求并调用合适的处理器方法...

    lijie_study-spring-framework-v5.2.0.RELEASE.zip

    在5.2.0.RELEASE版本中,`org.springframework.aop` 和 `org.springframework.aop.framework` 包内的类和接口,如`Advisor`、`Pointcut`、`ProxyFactoryBean`等,是AOP的核心组成部分。通过定义切面、切入点表达式和...

    spring1.2.8-src

    在 Spring 1.2.8 的源代码中,可以研究 `org.springframework.aop` 包,找到 `Advisor` 和 `Pointcut` 接口,以及 `ProxyFactoryBean` 类,这些都是实现AOP的关键组件。 此外,Spring 还包括对数据库操作的支持,如...

    spring-aop.jar

    spring-aop.jar包含了这些代理机制的相关类,如`org.springframework.aop.framework.ProxyFactoryBean`,它是创建代理对象的工厂。 2. **切面(Aspect)**:切面是AOP的核心概念,它封装了关注点的逻辑。在Spring中...

Global site tag (gtag.js) - Google Analytics