有朋友问有没有对spring的所有注解总结的文章呢?这里就给大家总结一下。

一、为何要关注注解?

答案,注解提供配置信息。你可以琢磨这句话,你看看你用的注解是不是给你的开发系统提供一些配置信息的呢?比如@Controller @Service @Value @WebListener…
在注解之前,我们通常用xml或者properties提供配置信息。xml可以支持结构化的配置信息,但是配置复杂,冗余过多;properties简单但是不能提供结构化的信息。所以注解的出现,简直完美解决了这个问题。

二、注解是什么呢?

注解是jdk1.5的新特性。设计目的是为程序提供元信息(metadata)。元信息就是提供程序之外信息,比如假设有个@Model的注解表示这个对象是个模型类。那么可以给User类,Student类都加上@Model注解来告诉系统,这些类是模型类。
正因如此,自jdk1.5以来,Java EE的各种都开始向注解式的配置靠拢。spring 4.0引入了基于Java的配置方式,完全放弃了xml配置,这也意味着必然会有各种注解来代替xml的配置。因此你可以找到各类门类繁多的注解也不足为奇了。

2.1 注解必须有处理程序

注意,注解的元数据信息必须要有处理器来处理。否则形同虚设。上例中,我们可能会对所有@Model的类做一个启动扫描,确保它们都实现了Serializble接口。这就需要一段程序来处理。

2. 2元注解

注解本身也可以加注解,我们来看spring中@Controller注解的源码

  1. @Target({ElementType.TYPE})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Component
  5. public @interface Controller {...}

上面的四个注解中,@Target @Retention @Documented 都是元注解,用来说明@Controller注解的某些特性。这里列举常用的元注解。

  • @Target:注解的作用目标,比如是可以加在类型还是属性上。由ElementType枚举定义具体值
  • @Retention:注解的生命周期,在哪个阶段保留,RetentionPolicy.RUNTIME表示运行时可以通过反射获取到,以便于处理程序执行处理,自定义注解常用该值。
  • @Documented:注解是否应当被包含在 JavaDoc 文档中
  • @Inherited:是否允许子类继承该注解
  • @Repeatable: jdk1.8新增,可重复的

三、Spring生态指哪些?

首先是Spring Framework里的spring核心容器 和 web mvc模块
其次是Spring Boot
再次是Spring Cloud

当然实际上spring生态极大,包括spring-data,spring-security等。因为Spring实际上已经是JavaEE开发的事实标准,所以各个领域都需要涉及。

四、Spring生态注解列表

列举一下spring各个部分的注解

4.1 Spring 核心容器

  • 声明为SpringBean的注解
    • @Controller 标记为Controller
    • @Service 标记为Service,加在实现类上
    • @Repository 标记为DAO,mybatis中不需要
    • @Component 其他组件,以上三个都不是的用这个
  • 依赖注入的注解
    • @Autowired 自动装配,spring提供
    • @Resource 自动装配,jdk提供,spring也支持
    • @Value 注入值,内容为SPEL表达式
  • java配置的注解
    • @Configuration 标记为java配置类
    • @Bean 标记为一个Bean
      • initMethod
      • destoryMethod
    • @Scope 标记该Bean的作用域
    • @ComponentScan指定组件扫描的基包
    • @Import 导入其他配置类
  • 事务支持
    • @EnableTransactionManagement 启用事务
    • @Transactional 声明式事务
  • AOP切面
    • @EnableAspectJAutoProxy 启动AOP自动代理
    • @Pointcut 声明切入点
    • @Before / @After / @AfterReturning /@Around / @AfterThrowing 声明各种通知
  • 其他

    • PropertySource 引用配置文件

      4.2 SpringMVC注解

  • 请求映射

    • @RequestMapping 请求映射
    • @GetMapping @PostMapping @PutMapping @DeleteMapping … 各种请求方式的简写形式
  • 参数
    • @RequestParam 标记请求参数
    • @PathVariable
  • 响应
    • @ResponseBody
    • @RestController
  • 其他
    • @ControllerAdvice
    • @InitBinder
  • SpringMVC的java配置

    • EnableWebMvc

      4.3 SpringBoot注解

      真正的springboot注解并不多,很多同学是从springboot开始学起,所以感觉很乱。建议按上表列出的内容逐步了解,到springboot反而就少了。特别是java配置方式的几个注解。
  • @SpringBootApplication 核心注解,是@ComponentScan、@Configuration和@EnableAutoConfiguration的复合注解

  • @EnableAutoConfiguration 启用自动配置,用于starter的自动配置
  • @SpringBootConfiguration 定义一个Bean为Spring
  • 自动配置的相关注解,有机会再补充,不影响日常使用。

Spring Cloud的体系很大,这里暂不加入。

好,今天就给大家总结到这里。