有朋友问有没有对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注解的源码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
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生态注解列表
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
- initMethod
- @Scope 标记该Bean的作用域
- @ComponentScan指定组件扫描的基包
- @Import 导入其他配置类
- 事务支持
- @EnableTransactionManagement 启用事务
- @Transactional 声明式事务
- AOP切面
- @EnableAspectJAutoProxy 启动AOP自动代理
- @Pointcut 声明切入点
- @Before / @After / @AfterReturning /@Around / @AfterThrowing 声明各种通知
其他
请求映射
- @RequestMapping 请求映射
- @GetMapping @PostMapping @PutMapping @DeleteMapping … 各种请求方式的简写形式
- 参数
- @RequestParam 标记请求参数
- @PathVariable
- 响应
- @ResponseBody
- @RestController
- 其他
- @ControllerAdvice
- @InitBinder
SpringMVC的java配置
@SpringBootApplication 核心注解,是@ComponentScan、@Configuration和@EnableAutoConfiguration的复合注解
- @EnableAutoConfiguration 启用自动配置,用于starter的自动配置
- @SpringBootConfiguration 定义一个Bean为Spring
- 自动配置的相关注解,有机会再补充,不影响日常使用。
Spring Cloud的体系很大,这里暂不加入。
好,今天就给大家总结到这里。