使用Spring的ProxyFactoryBean来拦截方法
先编写一个类这个类要implements MethodBeforeAdvice在这里我定义了一个MinstrelAdvice类implements MethodBeforeAdvice
MethodBeforeAdvice位置是org.springframework.aop.MethodBeforeAdvice
public class MinstrelAdvice implements MethodBeforeAdvice {
public void before(Method method, Object[] obj, Object target)
throws Throwable {
Knight knight = (Knight) target;
Logger song = Logger.getLogger(target.getClass());
System.out.println("MinstrelAdvice running.........");
song.debug("Brave " + knight.getName() + " did " + method.getName());
}
}
然后配置applicationContext.xml文件
<bean id="quest" class="com.springinaction.chapter01.knight.HolyGrailQuest"></bean>
<bean id="knightTarget" class="com.springinaction.chapter01.knight.KnightOfTheRoundTable">
<constructor-arg>
<value>Bedivere</value>
</constructor-arg>
<property name="quest">
<ref bean="quest"/>
</property>
</bean>
<bean id="new" class="com.springinaction.chapter01.knight.New"></bean>
<bean id="minstrel" class="com.springinaction.chapter01.knight.MinstrelAdvice">
</bean>
<bean id="knight" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<list><!-- 拦截Knight的方法 是一个接口类 -->
<value>com.springinaction.chapter01.knight.Knight</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>minstrel</value><!-- 先让minstrel处理请求 -->
</list>
</property>
<property name="target">
<ref bean="knightTarget"/> <!-- 再让knightTarget处理 -->
</property>
</bean>
使用ProxyFactoryBean来拦截Knight子类中的方法,定义interceptorNames属性让minstrel先处理请求,再定义target属性让knightTarget处理,这样我们就可以在使用Knight接口的子类时做一些提前的外理了,比如获得日志类Logger和不拦截的状态下所调用的方法.
分享到:
相关推荐
在本讨论中,我们将深入探讨Spring AOP如何与`ProxyFactoryBean`结合使用,以及它在Spring Boot中的具体实现。 **Spring AOP基本概念** AOP是一种编程范式,旨在将关注点分离,使代码更具模块化和可维护性。在...
对于源码分析,Spring的`org.springframework.beans.factory.config.MethodInvokingFactoryBean`和`org.springframework.aop.framework.ProxyFactoryBean`是策略模式的典型应用。前者用于在初始化时调用目标对象的...
7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”advisor 7.6. 简化代理定义 7.7. 使用...
在数据访问层,Spring支持JDBC、ORM(Hibernate、MyBatis等)框架的集成,使得数据库操作变得简单。在Web MVC模块中,`DispatcherServlet`作为核心组件,负责请求的分发,`ModelAndView`和`HandlerMapping`等类则...
而`org.springframework.aop.framework.ProxyFactoryBean`则实现了AOP代理,通过动态代理机制,使得可以在不修改原始代码的情况下,添加新的行为。 此外,Spring的事务管理(`org.springframework.transaction`包)...
7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”advisor 7.6. 简化代理定义 7.7. ...
Spring API中文版的提供,使得开发者能够更方便地理解和使用这个强大的框架。 首先,Spring的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。依赖注入允许...
4.2.3 使用ProxyFactoryBean 4.3 自动代理 4.3.1 为Spring切面创建自动代理 4.3.2 自动代理@AspectJ切面 4.4 定义纯粹的POJO切面 4.5 注入AspectJ切面 4.6 小结 第二部分 企业Spring 第5章 使用数据库 5.1...
AOP的核心接口是`org.springframework.aop.framework.ProxyFactoryBean`,它用于创建代理对象。 三、MVC框架 Spring MVC是Spring提供的Web MVC框架,用于构建RESTful服务。在`org.springframework.web.servlet`包...
Spring Web模块包含了MVC框架,使得开发RESTful服务变得简单。`DispatcherServlet`是Web MVC的入口,它负责请求分发;`Controller`接口和`@Controller`注解定义了处理请求的逻辑;`ModelAndView`对象封装了视图和...
7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”通知器 7.6. 简化代理定义 7.7. 使用...
7. **测试支持**:Spring提供了对JUnit和其他测试框架的集成,使测试更简单。`org.springframework.test` 包提供了测试相关的API。 在Spring 3.0.2的源码中,我们可以看到上述模块的具体实现细节,如IoC容器的工作...
`org.springframework.aop`包下的ProxyFactoryBean和AspectJ相关类是其核心。 5. **spring-expression.jar**(Spring Expression Language - SpEL):用于在运行时查询和操作对象图的强大的表达式语言。`org.spring...
`org.springframework.aop`和`org.springframework.context.support`包下的类和接口,如`Advisor`、`Pointcut`、`Aspect`和`ProxyFactoryBean`,是实现AOP的关键。 4. **Data Access/Integration**:Spring提供了对...
7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”advisor 7.6. 简化代理定义 7.7. ...
7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”通知器 7.6. 简化代理定义 7.7. 使用...
以下是一个简单的Spring AOP使用示例: ```java @Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint) { // 日志记录代码 ...
这是一个简单的Bean定义,其类型为`com.mooza.spring.aop.SubInterface`,可能是一个实现了某个接口的具体实现类。 ```xml <bean name="invocation" class="org.springframework.aop.framework.ProxyFactoryBean"> ...
- **使用ProxyFactoryBean创建AOP代理**:`ProxyFactoryBean`是Spring中的一个类,用于创建AOP代理。当定义了一个名为`myfactory`的`ProxyFactoryBean`时,引用`myfactory`的对象实际上获取的是`ProxyFactoryBean....