SpringBoot常见注解总览
一、启动类注解
- @SpringBootApplication:等价于@Configuration+@EnableAutoConfiguration+@ComponentScan
- @EnableAutoConfiguration:开启自动配置功能,自动根据导入的依赖来自动配置项目。
- @ComponentScan:该注解标识的类,会被 Spring 自动扫描并且装入bean容器。
- @Configuration:定义配置类,被注解的类内部包含有一个或多个被 @Bean 注解的方法
二、配置注解
- @Import:用来导入其他配置类。在项目启动的时候优先加载。
- @ImportResource:用来加载xml配置文件。
- @Service:一般用于修饰 service 层的组件。
- @Repository:使用该注解可以确保 dao 或者 repositories 提供异常转译,这个注解修饰的类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。
- @Value:注入properties/yml 配置的属性的值,具体用法如下:
@Value("${tool.calculate.digits}")
private String digits;
- @Bean:标注在方法上,将方法的返回对象交由 Spring 处理。与@Configuration一起使用。
- @Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
- @Slf4j:使用SLF4J日志类库,无需创建日志记录器。
- @Scope:是springIoc容器中的一个作用域。直接在bean对象方法上增加@Scope注解就可以如下。
@Scope(value="prototype")
@Bean(value="user0",name="user0",initMethod="initUser",destroyMethod="destroyUser")
public User getUser(){
System.out.println("创建user实例");
return new User("张三",26);
}
三、元注解
- @Documented:表明这个注解应该被 javadoc工具记录。默认情况下,javadoc是不包括注解的,但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理,所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员。
- @Target:用于定义注解的使用位置,如果没有该项,表示注解可以用于任何地方。
- @Retention:用于指明修饰的注解的生存周期,即会保留到哪个阶段。
- @Inherited:用于标注一个父类的注解是否可以被子类继承。
四、AOP相关注解
AOP(Aspect Oriented Programming)意为“面向切面编程”,旨在分离关注点,达到一种可配置的、可插拔的、可动态的程序结构。
- @Aspect:用来描述一个切面类,定义切面类的时候需要打上这个注解。
- @Pointcut:用来定义一个切面(切入点),即上文中所关注的某件事情的入口。切入点决定了连接点关注的内容,使得我们可以控制通知什么时候执行。
- @Before:指定的方法在切面切入目标方法之前执行,可以做一些 Log 处理,也可以做一些信息的统计。
- @After:指定的方法在切面切入目标方法之后执行,也可以做一些完成某方法之后的 Log 处理。
- @AfterReturning:用来捕获切入方法执行完之后的返回值,对返回值进行业务逻辑上的增强处理。
- @AfterThrowing:当被切方法执行过程中抛出异常时,会进入 @AfterThrowing 注解的方法中执行,在该方法中可以做一些异常的处理逻辑。
五、异常处理相关注解
- @RestControllerAdvice:捕获全局异常,针对Controller进行增强的,可以全局捕获spring mvc抛的异常。
- @ExceptionHandler:用来捕获指定的异常。
六、Bean注入相关注解
- @Autowired:按类型(byType)自动注入依赖的Bean,可以对类成员变量、方法及构造函数进行标注。可以添加(required=false)属性,规避无法匹配相应Bean的异常。
- @Qualifier:当存在多个同一类型的Bean时,可以用@Qualifier(“name”)配合@Autowired来指定要注入的Bean。
- @Resource(name=”name”,type=”type”):功能与@Autowired类似,没有括号内内容的话,默认使用byName方式匹配。指定了什么就使用什么匹配。
- @Inject:等价于默认的@Autowired,只是没有required属性。默认通过类型匹配,可配合@Named(“name”)注解通过名字来匹配
七、MVC项目相关注解
- @Controller:用于定义控制器类,在Spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。
- @ResponseBody:直接返回json数据。
- @RestController: SpringBoot 新增的一个注解,返回JSON格式的数据,可以看作是 @Controller 和 - @ResponseBody 的结合体。
- @RequestMapping:用来处理请求地址映射的注解,它可以用于类上,也可以用于方法上。
- @PathVariable:要用来获取Restful风格的url("/student/{id}")的参数。
- @RequestParam:也是获取请求参数的,和@PathVariable不同之处在于,它处理的url格式为http://localhost:8080/student?id=1。
- @RequestBody:用于接收前端传来的实体,接收参数也是对应的实体。
八、数据层相关注解
- @Transactional:使用这个注解的类或者方法表示该类里面的所有方法或者这个方法的事务由spring处理,来保证事务的原子性,即是方法里面对数据库操作,如果失败则spring负责回滚操作,成功则提交操作。
- @Mapper:注解在dao层接口上,最终 Mybatis 会有一个拦截器,会自动的把 @Mapper 注解的接口生成动态代理类。
- @MapperScan:注解在启动类上,配置一个或多个包路径,自动的扫描这些包路径下的类,自动的为它们生成代理类,可以避免为每个dao层接口注解@Mapper。
- @Select:注解在dao层方法上,执行一条查询语句。
- @Insert:注解在dao层方法上,执行一条插入语句。
- @Update:注解在dao层方法上,执行一条更新语句。
- @Delete:注解在dao层方法上,执行一条删除语句。
九、lombok实体层相关注解
- @Setter:注解在属性上,为属性提供 set 方法。
- @Getter:注解在属性上,为属性提供 get 方法。
- @Data:注解在类上,提供类所有属性的 get 和 set 方法,此外还提供了@equals、@canEqual、@hashCode、@toString 方法。
- @Builder:构建对象,用在类上面。
- @AllArgsConstructor:注解在类上,为类提供一个全参的构造方法。
- @NoArgsConstructor:注解在类上,为类提供一个无参的构造方法。
- @NonNull:注解在属性上,该注解修饰的属性不能为 null。
- @val:注解在属性上,该注解修饰的属性被设置为 final 类型。
- @SneakyThrows:注解在方法上,用于替代try{}catch(){} 这种异常模板。
- @toString:生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。
- @RequiredArgsConstructor:该注解通过构造来替代@Autowrited。用法如下:
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@RestController
@RequestMapping("/omponent")
public class ComponentController {
private final ComponentService ComponentService;
}
ps:写在类上可以代替@AutoWired注解,需要注意的是在注入时需要用final定义,或者使用@Notnull注解