在SringBoot 启动项中,我们添加注解,可以直接启动项目:
今天就从这个@SpringBootApplication 认识下Java 注解:
1、首先我们先了解下Java 中元注解:一种应用于其他注解的注解
比如:在java.lang.annotation包下面定义了以下几种元注解类型
@Target注解标记了另一个注解,以限制该注解可以应用于哪种Java元素。@Target注解指定以下元素类型之一作为其值:
ElementType.ANNOTATION_TYPE,可以应用于注解类型。
ElementType.CONSTRUCTOR,可以应用于构造函数。
ElementType.FIELD,可以应用于字段或属性。
ElementType.LOCAL_VARIABLE,可以应用于局部变量。
ElementType.METHOD,可以应用于方法级注解。
ElementType.PACKAGE,可以应用于包声明。
ElementType.PARAMETER,可以应用于方法的参数。
ElementType.TYPE,可以应用于类的任何元素。
@Retention注解指定了标记的注解如何存储:
RetentionPolicy.SOURCE,标记的注解仅保留在源代码级别,并被编译器忽略。
RetentionPolicy.CLASS,标记的注解在编译时由编译器保留,但被Java虚拟机(JVM)忽略。
RetentionPolicy.RUNTIME,标记的注解由JVM保留,以便运行时环境可以使用。
@Documented注解指示每当使用指定的注解时,应使用Javadoc工具记录这些元素。
@Repeatable注解是JavaSE8中引入的,表示标记的注解可以多次应用于同一声明或类型使用。
2、其次我们在了解下Spring框架中注解:
@ComponentScan注解
@ComponentScan注解一般和@Configuration注解一起使用,主要的作用就是定义包扫描的规则,然后根据定义的规则找出哪些需类需要自动装配到spring的bean容器中,然后交由spring进行统一管理。
说明:针对标注了@Controller、@Service、@Repository、@Component 的类都可以别spring扫描到。
@Filter注解作用
@Filter 注解主要用于在 Spring 容器中自动注册 Bean 时,
可以通过它对注册 Bean 进行过滤、排除或者只包含某些 Bean。
@SpringBootApplication 注解包含了 @ComponentScan 注解,
它默认会扫描启动类所在包及其子包中的所有 Bean,并将它们注册到 Spring 容器中。
但是,有些情况下我们不希望某些特定的 Bean 被扫描并注册到 Spring 容器中,
比如 SpringBoot 的自动配置类。
@Filter 注解的作用就是过滤掉指定的 Bean,不让它们被注册到 Spring 容器中。
具体用法如下所示:
@SpringBootApplication(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class})})
excludeFilters 属性用于指定需要排除的 Bean,通过 @Filter 注解的 type 属性设置过滤器类型,
包含 ANNOTATION、ASSIGNABLE_TYPE、CUSTOM、REGEX 和 ASPECTJ等多种类型
@AliasFor注解
@AliasFor
是Spring Framework中的一个注解,从4.2版本开始出现,源码位于spring-core中,用于注解的属性之上,为该属性声明一个别名。
顾名思义,@AliasFor表示别名,它可以添加到自定义注解的两个属性上,表示这两个属性互为别名。也就是说,这两个属性其实是同一个含义。
通常所有注解都会有一个属性value,在使用注解时,如果给value进行赋值,默认可以将value省略,如:@RequestMapping(value="name") 就可以写成
若自定义注解继承了另一个注解,要想使用继承过来的属性值,就必须在自定义注解中重新定义一个属性,同时声明该属性是继承过来注解的某个属性的别名。例如:
自定义注解@MyComponent继承了注解@Component(继承了哪个注解,就需要在自定义注解上引入该注解),name属性与@Component中的value属性互为别名。