spring 自定义注解

1、jdk1.5内置了三种标准注解

@Override,表示当前的方法定义将覆盖超类中的方法。

@Deprecated,使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码。

@SuppressWarnings,关闭不当编辑器警告信息。

2、还提供了4种专门负责新注解的创建:

@Target:

@Target –注解用于什么地方,默认值为任何元素,表示该注解用于什么地方。可用的ElementType指定参数
● ElementType.CONSTRUCTOR:用于描述构造器
● ElementType.FIELD:成员变量、对象、属性(包括enum实例)
● ElementType.LOCAL_VARIABLE:用于描述局部变量
● ElementType.METHOD:用于描述方法
● ElementType.PACKAGE:用于描述包
● ElementType.PARAMETER:用于描述参数
● ElementType.TYPE:用于描述类、接口(包括注解类型) 或enum声明

@Retention

表示需要在什么级别保存该注解信息。

什么时候使用该注解,即注解的生命周期,使用RetentionPolicy来指定
● RetentionPolicy.SOURCE : 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们 不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
● RetentionPolicy.CLASS : 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式
● RetentionPolicy.RUNTIME : 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。

@Document

将注解包含在Javadoc中

@Inherited

允许子类继承父类中的注解

1.定义

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented()
public @interface MyAnnotation { String name() default ""; //如果变量为value,后面使用是可以不指定value }


2.使用
@MyAnnotation(name="CC")  // @MyAnnotation("cc")
public @interface MyAnnotation {
    String name() default "";
}

3.现在就可以对注解的类进行操作,有2中方式
第一种.
  实现
BeanFactoryPostProcessor接口---> 可以在spring的bean创建之前,修改bean的定义属性。也就是说,Spring允许BeanFactoryPostProcessor在容器实例化任何其它bean之前读取配置元数据,并可以根据需要进行修改,
@Component
public class HessianInterfaceConfig implements BeanFactoryPostProcessor{
private final Log log = LogFactory.getLog(getClass());

@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
HashMap<String, String> interfaceMap = new HashMap<>();
String[] beanNames = beanFactory.getBeanNamesForAnnotation(MyAnnotation.class);
  ....可以进行一系列处理,例如:动态暴露接口等
}
}
 


原文地址:https://www.cnblogs.com/collin/p/10842840.html