版权声明:支持原创,转载注明出处! https://blog.csdn.net/qq_39416311/article/details/82119050
java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。
注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。
1:写元注解,包括:@Retention,@Target,@Document,@Inherited四种。
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface xxxAnnotation{
/**
* @return whether query cache, true is query cache, false is not.
*/
boolean value() default true;
/**
* @return the expire time of cache, default is 60s
*/
int expireTime() default 60;
}
1.1:@Target:定义注解的作用目标
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
1.2:@Retention: 定义注解的保留策略
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
1.3:@Inherited:说明子类可以继承父类中的该注解
1.4:@Documented:注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中
切面:AOPxml
<bean id="xxxAspect" class="com.xxx.xxxAspect"/>
<aop:config>
<aop:aspect ref="xxxAspect">
<aop:pointcut id="xxxService" expression="execution(* com.xxx..*.*(..))"/>
<aop:around method="queryxxx"(切面走的方法) pointcut-ref="xxxService"/>
</aop:aspect>
</aop:config>
public class xxxAspect {
public Object queryxxx(ProceedingJoinPoint joinpoint) throws Throwable {
xxxAnnotation clazzCacheSwitcher = joinpoint.getTarget().getClass().getAnnotation(xxxAnnotation.class);
MethodSignature methodSignature = (MethodSignature) joinpoint.getSignature();
xxxAnnotation methodCacheSwitcher = methodSignature.getMethod().getAnnotation(xxxAnnotation.class);
//xxxk可以用于走注解的配置
//下面是用于走调用注解,原来的方法。就是直接注解的入口方法。
joinpoint.proceed();
//xxx执行对应代码
}
}