从头开始Spring Boot 之注解编程
元注解
A meta-annotation is an annotation that is declared on another annotation
元注解的作用就是负责注解其他注解。
Java5.0定义的元注解有以下几种:
@Target 描述注解的范围,即注解在哪用(类成员变量、构造器、方法局部变量、方法等等)
@Retention 描述注解的保留级别(源文件、class、运行时)
@Documented 可以被文档化
@Inherited 用于表示某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
模式注解
Spring核心部分提供了几种内建的 stereotype annotation模式注解
,都派生于@Component
。因为Annotation没有继承的特性,所以采用了元注解的方式实现继承的特性。
@Service
@Repository
@Controller
@Configuration
@Component派生性
@Component注解作为Spring容器托管的通用模式组件,任何被@Component标注的组件均为组件扫描的候选对象。
Spring 注解驱动示例
注解驱动上下文 AnnotationConfigApplicationContext
, Spring Framework 3.0 开始引入的
@Configuration
public class SpringAnnotationDemo {
public static void main(String[] args) {
// XML 配置文件驱动 ClassPathXmlApplicationContext
// Annotation 驱动
// 找 BeanDefinition
// @Bean @Configuration
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
// 注册一个 Configuration Class = SpringAnnotationDemo
context.register(SpringAnnotationDemo.class);
// 上下文启动
context.refresh();
System.out.println(context.getBean(SpringAnnotationDemo.class));
}
}
组合注解
Composed Annotations,字面意思,一个或多个注解组合起来使用,比如@AliasFor和@RequestMapping组合,也可以自己组合。
代码
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.GET)
public @interface GetMapping {
/**
* Alias for {@link RequestMapping#name}.
*/
@AliasFor(annotation = RequestMapping.class)
String name() default "";
/**
* Alias for {@link RequestMapping#value}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] value() default {};
/**
* Alias for {@link RequestMapping#path}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] path() default {};
// ...
}