如何定义一个aop组件

如何定义一个aop组件,第1张

前面说过了spring的Schema扩展支持,可以看这里31Spring源码解析——定义标签的使用,这里就不在进行多余的复述了。
前面讲过,Spring支持自定义的扩展组件,但是必须以下两点

自定义类并实现Spring的BeanDefinitionParser类来解析XSD文件中的定义和组件定义,

自定义类并实现Spring的NamespaceHandlerSupport目的是将组建注册到Spring容器

对应的文件的解析类可以在META-INF文件夹的Springhandlers中可以找到
在代码中对定义的Aspect的注解进行解析的类为AopNamespaceHandler:

   public void init() {
       // In 20 XSD as well as in 21 XSD
       registerBeanDefinitionParser("config", new ConfigBeanDefinitionParser());
       registerBeanDefinitionParser("aspectj-autoproxy", new AspectJAutoProxyBeanDefinitionParser());
       registerBeanDefinitionDecorator("scoped-proxy", new ScopedProxyBeanDefinitionDecorator());
       // Only in 20 XSD: moved to context namespace as of 21
       registerBeanDefinitionParser("spring-configured", new SpringConfiguredBeanDefinitionParser());
   }

在解析配置文件的时候,一旦遇到aspectj-autoproxy注解时就会使用解析器AspectJAutoProxyBeanDefinitionParser进行解析。
下一篇Spring的AOP的解析——AnnotationAwareAspectJAutoProxyCreator

判断当前名为signatureName的方法是否在invokeClass类所实现的API接口中被Tag。(实现3和4的判断)
判断当前类是否为Objectclass,若不是则执行第三步,否则执行第四步
判断当前名为signatureName的方法是否在类invokeClass中被tag(实现1和2的判断)
上面三项没有为真,则调用当前类的父类继续递归(实现5和6的判断)

我们知道使用@Pointcut注解定义切点,它的value属性可以是 切点表达式 或者 注解的全限定名 ;若使用注解的方式,直接在目标切入点方法上加上自定义注解即可纳入AOP的管理

在创建自定义注解时有看到三个注解,分别了解它们的作用

我们先来看看这个枚举类javalangannotationElementType就是定义注解使用的地方。比如 @Target(ElementTypeMETHOD) 就是只能用在方法上了。不过可以同时指定多个ElementType的属性来达到既可以用在方法上也可以用在类上的目的: @Target({ElementTypeTYPE, ElementTypeMETHOD})

Documented注解表明这个注释是由 javadoc记录的。 如果一个类型声明被注释了文档化,它的注释成为公共API的一部分。

再来看这个枚举类 javalangannotationRetentionPolicy。该类主要功能是定义注解的 生命周期

创建注解类TestAnnotation。里面有一个name参数,默认是no;没错,该注解只能用在方法上,不能用在类、接口;而且是运行时类型的

在目标方法上使用注解

创建切面类

最后重启工程,访问 >

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/13369060.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-31
下一篇2025-08-31

发表评论

登录后才能评论

评论列表(0条)

    保存