自定义pointcut,spring自供一个ComposablePointcutpointcut
他有5个构造方法,现在不过滤类的,只过滤方法的通知
java 代码
- ComposablePointcut()
- Create a default ComposablePointcut, with ClassFilter.TRUE and MethodMatcher.TRUE.
- ComposablePointcut(ClassFilter classFilter)
- Create a ComposablePointcut for the given ClassFilter, with MethodMatcher.TRUE.
- ComposablePointcut(ClassFilter classFilter, MethodMatcher methodMatcher)
- Create a ComposablePointcut for the given ClassFilter and MethodMatcher.
- ComposablePointcut(MethodMatcher methodMatcher)
- Create a ComposablePointcut for the given MethodMatcher, with ClassFilter.TRUE.
- ComposablePointcut(Pointcut pointcut)
- Create a ComposablePointcut based on the given Pointcut.
要实现在的通知
java 代码
- package composablepointcut;
-
- import java.lang.reflect.Method;
-
- import org.springframework.aop.MethodBeforeAdvice;
-
- public class BeforeAdvice implements MethodBeforeAdvice {
-
-
- public void before(Method method, Object[] args, Object target)
- throws Throwable {
- System.out.println("Before method: " + method);
- }
-
- }
目标对象
java 代码
- package composablepointcut;
-
- public class Person {
- public String getName(){
- return "java";
- }
- public void setAge(){
- System.out.println("setAge");
- }
- public String getAddress(){
- return "china";
- }
-
- }
实现staticmethodmatcher接口,实现对setAge() 方法的通知
java 代码
- package composablepointcut;
-
- import java.lang.reflect.Method;
-
- import org.springframework.aop.support.StaticMethodMatcher;
-
- class SetAgeMethodMatcher extends StaticMethodMatcher {
- public boolean matches(Method method, Class cls) {
- return "setAge".equals(method.getName());
- }
- }
java 代码实现对set开头的 方法的通知
- package composablepointcut;
-
- import java.lang.reflect.Method;
-
- import org.springframework.aop.support.StaticMethodMatcher;
-
- class SetterMethodMatcher extends StaticMethodMatcher {
-
- public boolean matches(Method method, Class cls) {
- return (method.getName().startsWith("set"));
- }
-
- }
java 代码实现对getname() 方法的通知
- package composablepointcut;
-
- import java.lang.reflect.Method;
-
- import org.springframework.aop.support.StaticMethodMatcher;
-
-
- class GetNameMethodMatcher extends StaticMethodMatcher {
-
- public boolean matches(Method method, Class cls) {
- return (method.getName().startsWith("get"));
- }
-
- }
创建一个advisor ,使用DefaultPointcutAdvisor
java 代码
- Advisor advisor = new DefaultPointcutAdvisor(pc,
- new SimpleBeforeAdvice());
java 代码
- package composablepointcut;
-
- import org.springframework.aop.Advisor;
- import org.springframework.aop.ClassFilter;
- import org.springframework.aop.framework.ProxyFactory;
- import org.springframework.aop.support.ComposablePointcut;
- import org.springframework.aop.support.DefaultPointcutAdvisor;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- import aop1.SimpleBeforeAdvice;
-
- public class ComposablePointcutTest {
- private static Person getProxy(ComposablePointcut pc, Person target) {
- Advisor advisor = new DefaultPointcutAdvisor(pc,
- new SimpleBeforeAdvice());
- // 没用proxyFactoryBean 配制xml麻烦的要死,直接使用proxyfactory
- ProxyFactory pf = new ProxyFactory();
- pf.setTarget(target);
- pf.addAdvisor(advisor);
-
- return (Person) pf.getProxy();
- }
- private static void runProxy( Person proxy) {
- proxy.getAddress();
- proxy.getName();
- proxy.setAge();
- }
- public static void main(String[] args) {
- Person target = new Person();
- //这里只实现一个过滤setAge方法,可以通compostable.union()组合过滤方法,
- //intersection方法取交集
- ComposablePointcut compostable = new ComposablePointcut(ClassFilter.TRUE,new SetAgeMethodMatcher());
- Person proxy = ComposablePointcutTest.getProxy(compostable, target);
- ComposablePointcutTest.runProxy(proxy);
- }
- }
spring还提供一个nameMatchMethodPointcut,使用对方法名的过滤.
void setMappedName(String mappedName)
Convenience method when we have only a single method name to match.
void setMappedNames(String[] mappedNames)
Set the method names defining methods to match.
可以通过这两个方法实现过滤的通知
还有RegexpMethodPointcut,支持正则表达式过滤通知方法
分享到:
相关推荐
在这个入门实例中,我们将深入理解Spring AOP如何实现简单日志记录。 首先,AOP的核心概念包括切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点(Pointcut)和织入(Weaving)。切面是AOP中的核心...
- **SpringAOP.avi**:可能是一个视频教程,详细讲解了Spring AOP的概念和实践。 - **SpringAOP.doc**:可能是文档教程,包含了详细的步骤和示例代码。 - **SpringAOP_src.rar**:源代码示例,供你参考和实践。 - **...
### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个关键特性,它为开发者提供了在运行时动态添加代码(即横切关注点或切面)到已有...
本教程将通过一个简单的Spring AOP入门案例,帮助初学者理解这一概念。 ### 一、AOP基础 1. **切面(Aspect)**:切面是关注点的模块化,它封装了跨越多个对象的行为或数据。在Spring AOP中,切面可以由一个类定义...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来实现横切关注点,如日志、事务管理、性能监控等。本入门案例将帮助你理解并掌握Spring AOP的基本概念和使用方法。 在...
**Spring AOP 入门实例** 在Java编程中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它允许程序员定义“横切关注点”,如日志、事务管理、性能监控等,然后将这些关注点与核心业务逻辑...
以下是一个简单的Spring AOP入门实例步骤: 1. 首先,定义一个切面类,包含通知方法。例如,一个简单的日志切面: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example*...
**Spring AOP 入门及其实例讲解** 在软件开发中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,它旨在提高代码的可重用性,减少冗余,并将关注点分离。Spring框架是Java开发中的一个流行...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要模块,它扩展了传统的面向对象编程,允许开发者定义“横切关注点”(cross-cutting concerns),如日志、事务管理、性能监控等。...
Spring的AOP(面向切面编程)是一种编程范式,它允许程序员在不修改源代码的情况下,通过插入称为切面的代码片段来增强程序的功能。这个简单例子将帮助我们理解AOP的基本概念和如何在Spring框架中实现它。 首先,...
### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP (Aspect Oriented Programming) 是一种面向切面编程的技术,在Spring框架中得到了良好的支持。通过这种方式,开发者可以更加灵活地组织代码,使得...
5. 代理(Proxy):Spring AOP通过动态代理机制创建一个对象的代理,代理对象负责在方法调用前后执行通知。有两种类型的代理:JDK动态代理和CGLIB代理。JDK动态代理适用于实现了接口的目标对象,而CGLIB代理则用于未...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理等。在本主题中,我们将深入探讨Spring AOP的注解版,它是基于Java注解的...
Spring Aop基于xml练习
Spring AOP 简单入门示例 AOP(Aspect-Oriented Programming),即面向方面编程,是一种编程范式。AOP 是 OOP 的补充,它将系统中的横切性关注点模块化,并将其与业务逻辑分离。 在 Spring 中,AOP 是通过使用 ...
Spring AOP,全称Aspect Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它为应用程序提供了一种模块化和声明式的方式来处理横切关注点,如日志、事务管理、性能监控等。在本入门例子中,你将...
Spring AOP,全称Aspect Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它为应用程序提供了一种模块化和声明式的方式来处理横切关注点,如日志、事务管理、性能监控等。在传统的面向对象编程...
### Spring2-AOP入门实例教程知识点详解 #### 一、Spring框架概述 - **轻量级J2EE开发框架**:Spring是一个轻量级的Java应用框架,它为开发复杂的企业级应用提供了一种简化的方法。 - **发展历程**:自2002年发布...
在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种重要的设计模式,它扩展了传统的面向对象编程(OOP),使得我们可以将关注点分离,特别是那些横切关注点,如日志、事务管理、权限检查...