当前位置:首页 > Java技术 > Spring Boot之@SpringBootApplication注解以及其他常用注解

Spring Boot之@SpringBootApplication注解以及其他常用注解

2022年11月08日 16:09:08Java技术38

本篇介绍Spring Boot常用注解,但这些注解不一定是Spring Boot提供的,部分内容总结摘抄自《Spring Boot实战派》,仅作笔记。

@SpringBootApplication注解

@SpringBootApplication是Spring Boot的核心注解,其主要目的是开启自动配置。想要具体了解我们可以在启动类中打开此注解定义,打开后可以发现其被如下元注解修饰:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

下面逐一介绍以上元注解的作用:

  • @Target:表明修饰注解的作用对象,下面是作用对象的所有的值以及它们代表的对象:
  1. ElementType.TYPE:接口,类,枚举,注解;
  2. ElementType.FIELD:字段,枚举常量;
  3. ElementType.METHOD:方法;
  4. ElementType.PARAMETER:方法参数;
  5. ElementType.CONSTRUCTOR:构造函数;
  6. ElementType.LOCAL_VARIABLE:局部变量;
  7. ElementType.ANNOTATION_TYPE:注解;
  8. ElementType.PACKAGE:包。
  • @Retention:表明修饰注解的生命周期,下面是生命周期的值以及它们代表的周期:
  1. RetentionPolicy.SOURCE:注解只保留在源文件中,当该Java文件编译为class文件时,注解被遗弃;
  2. RetentionPolicy.CLASS:注解被保留到class文件中,当JVM加载此class文件时被遗弃,是默认声明周期;
  3. RetentionPolicy.RUNTIME:当JVM加载此class文件时,注解仍然存在。
  • @Document:表明修饰注解的标记元素的信息将出现在javadoc中。
  • @Inherited:表明修饰注解在使用时,如果注解在类上面,该类的子类会自动继承修饰注解。
  • @SpringBootConfiguration:与@Configuration注解作用相同,将其修饰的类中的带有@Bean修饰的方法作为实例加入到Spring容器中。
  • @EnableAutoConfiguration:借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IOC容器。其修饰的元注解如下:
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @AutoConfigurationPackage
    @Import({AutoConfigurationImportSelector.class})

    这里我们只需要关注其中两个注解@AutoConfigurationPackage和@Import({AutoConfigurationImportSelector.class})。@AutoConfigurationPackage作用是将主程序类所在的包及子包下的组件扫描到Spring容器中。@Import({AutoConfigurationImportSelector.class})的作用是将AutoConfigurationImportSelector导入到Spring容器中,AutoConfigurationImportSelector的作用是将所有符合条件的@Configuration配置都加载到当前IOC容器中。

  • @ComponentScan:自动扫描被注解修饰的类,默认扫描范围为该注解修饰的类所在的包以及子包的类。

Spring Boot常用注解

注解(annotations)用来定义一个类、属性或一些方法,以便程序能被编译处理,它相当于一个说明文件,告诉应用程序某个被注解的类或属性是什么,要怎么处理。注解可以用于标注包、类、方法和变量等。

Spring Boot的常用注解以及它们的用法如下:

  • @RestController

作用在类上,作用相当于@ResponseBody和@Controller,用于返回JSON、XML等数据,但不能返回HTML页面。

  • @Controller

作用在类上,用于标注控制器层,在MVC开发模式中代表C控制器,主要用于构建MVC模式的程序。

  • @Service

作用在类上,用于声明一个业务处理类,标注服务层,处理业务逻辑。

  • @Repository

作用持久层接口上,该注解除了将类标记为Bean外,它还可以将标记的类中抛出的数据访问异常封装为Spring的数据访问异常类型,在使用时需要在启动类上添加“@MapperScan("包名")”注解。

  • @MapperScan

作用在Spring Boot项目的启动类上,用于将所有其指定的包下的所有接口在编译后生成实现类。使用该注解时,@Repository注解可以不用,在idea中虽然会提示该bean找不到,但不影响功能。当然最好两个都加上就没什么问题。

  • @Component

作用在无法用@Service、@Controller、@Repository描述的Spring管理的类上,仅代表此类被Spring管理,相当于通用的注解。

  • @Configuration

作用在类上,声明此类是一个配置类,常与@Bean配合使用。

  • @Resource

作用在类名、属性或构造函数参数上,默认按照byName自动注入。

  • @Autowired

作用在类名、属性或构造函数参数上,默认按照byType自动注入。

  • @RequestMapping

作用在类名或方法上,用在类上则表示此Controller的所有响应请求的方法都是以该地址作为父路径的。

  • @Transactional

作用在类名或方法上,用于处理事务。

  • @RequestBody

作用在方法参数前,常用来处理application/json、application/xml等Content-Type类型的数据,意味着HTTP消息是JSON/XML格式,需将其转化为指定类型参数。

  • @PathVariable

作用在方法参数前,将URL获取的参数映射到方法参数上。

  • @Bean

作用在方法上,声明该方法的返回结果是一个由Spring容器管理的Bean。

  • @ResponseBody

作用在方法上,通过适当的HttpMessageConverter将控制器中方法返回的对象转换为指定格式(JSON/XML)后,写入Response对象的body数据区。

  • @Aspec

作用在入口类或普通类上,标注切面,可以用来配置事务、日志、权限验证,在用户请求时做一些处理等。

  • @ExceptionHandler

作用在方法上,表示遇到这个异常就执行该方法。

  • @Value

作用在属性上,用于获取配置文件中的值。

  • @Scope

作用在类和方法上,用来标识Bean的作用域,作用域的值可以为如下几个:

  1. singleton:单例模式,全局有且仅有一个实例,默认就是此模式。
  2. prototype:原型模式,每次获取Bean的时候都会有一个新的实例。
  3. request:每一次HTTP请求都会产生一个新的Bean,并且该Bean仅在当前HTTP request内有效。
  4. session:每一次HTTP请求都会产生一个新的Bean,并且该Bean仅在当前HTTP session内有效。
  5. global session:类似于标准的HTTP session作用域,但其仅在基于portlet的web应用中才有意义。
  • @Runwith

一个运行器,例如@RunWith(SpringJUnit4ClassRunner.class)就是让测试运行在Spring环境中,@RunWith(JUnit4.class)就是让Junit4运行。

  • @WebFilter

作用在类上,标注这个类是一个过滤器。常用属性包括filterName(过滤器名称),urlPatterns(String[] URL匹配模式)。但此注解并不是Spring Boot提供的注解,而是Servlet3.0的规范,毕竟过滤器是依赖Servlet的,所以使用此注解时需要在启动类上添加@ServletComponetScan注解来扫描过滤器位置。

  • @WebListener

作用在类上,标志这个类是一个监听器。此注解同样是Servlet规范,因此在使用时也需要在启动类上添加@ServletComponetScan注解来扫描监听器位置。

作者:赵彦祖
来源链接:https://blog.csdn.net/qq_16619993/article/details/108068408

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/68522.html

分享给朋友: