
前面说过了spring的Schema扩展支持,可以看这里31Spring源码解析——自定义标签的使用,这里就不在进行多余的复述了。
前面讲过,Spring支持自定义的扩展组件,但是必须以下两点
自定义类并实现Spring的BeanDefinitionParser类来解析XSD文件中的定义和组件定义,
自定义类并实现Spring的NamespaceHandlerSupport目的是将组建注册到Spring容器
对应的文件的解析类可以在META-INF文件夹的Springhandlers中可以找到
在代码中对定义的Aspect的注解进行解析的类为AopNamespaceHandler:
// 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
判断当前类是否为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;没错,该注解只能用在方法上,不能用在类、接口;而且是运行时类型的
在目标方法上使用注解
创建切面类
最后重启工程,访问 >
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)