总结的了平时学习springboot常用的一些注解,方便以后开发时可以阅览回忆
springboot的常用注解可以分为以下几类:
- 核心注解:这些注解是springboot的基础,用于启动、配置和管理springboot应用。
- Web MVC注解:这些注解是基于spring MVC框架的,用于处理Web请求和响应。
- 数据访问注解:这些注解是基于spring data框架的,用于操作数据库和缓存。
- 测试注解:这些注解是基于spring test框架的,用于编写和运行单元测试和集成测试。
下面分别介绍这些注解的具体含义和用法。
目录
一、核心注解
1、@SpringBootApplication
2、@SpringBootConfiguration
3、@EnableAutoConfiguration
4、@ComponentScan
5、@Component
6、@Configuration
7、@Bean
8、@Import
9、@ImportResource
10、@Autowired
二、Web MVC注解
1、@Controller
2、@RestController
3、@RequestMapping
4、@GetMapping
5、@PostMapping
三、数据访问注解
1、@Repository
2、@JpaRepository
3、@Query
4、@Param
5、@Modifying
6、@Transactional
7、@Cacheable
四、测试注解
1、@SpringBootTest
2、@RunWith
3、@Test
4、@Before
5、@After
6、@BeforeClass
7、@AfterClass
8、@MockBean
9、@SpyBean
总结
一、核心注解
1、@SpringBootApplication
这是springboot最核心的注解,用在主类上,表示这是一个springboot应用,它包含了以下三个注解:
- @Configuration:表示这是一个配置类,相当于传统的XML配置文件,可以使用@Bean注解定义需要注册到spring容器中的bean。
- @EnableAutoConfiguration:表示启用自动配置,根据当前类路径下的依赖包,自动配置合适的bean,如数据库连接池、事务管理器、Web服务器等。
- @ComponentScan:表示扫描当前包及其子包下的所有组件,并注册为bean,如控制器、服务、仓库等。
2、@SpringBootConfiguration
这是一个组合注解,相当于@Configuration和@EnableAutoConfiguration的结合。它可以用在主类上,也可以用在其他配置类上,表示这是一个springboot配置类。
3、@EnableAutoConfiguration
这是一个组合注解,相当于@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)的结合。它可以用在主类上,也可以用在其他配置类上,表示启用自动配置。它会根据当前类路径下的依赖包,自动导入对应的自动配置类,并注册相关的bean。如果不想使用某些自动配置类,可以使用exclude或excludeName属性进行排除。
4、@ComponentScan
这是一个组合注解,相当于@Retention(RetentionPolicy.RUNTIME)、@Target(ElementType.TYPE)、@Documented、@Inherited和@Repeatable(ComponentScans.class)的结合。它可以用在主类上,也可以用在其他配置类上,表示扫描指定包下的所有组件,并注册为bean。它有以下几个属性:
- value或basePackages:指定要扫描的包名或包名数组。
- basePackageClasses:指定要扫描的包含组件的类或类数组。
- includeFilters:指定要包含的过滤器或过滤器数组。
- excludeFilters:指定要排除的过滤器或过滤器数组。
- lazyInit:指定是否延迟初始化bean,默认为false。
- nameGenerator:指定bean名称生成器,默认为AnnotationBeanNameGenerator。
- scopeResolver:指定bean作用域解析器,默认为AnnotationScopeMetadataResolver。
- scopedProxy:指定是否使用代理创建作用域bean,默认为ScopedProxyMode.DEFAULT。
- resourcePattern:指定要扫描的资源模式,默认为"**/*.class"。
- useDefaultFilters:指定是否使用默认的过滤器,默认为true。
5、@Component
这是一个通用的注解,表示这是一个组件,可以被spring容器扫描和管理。它可以用在任何类上,也可以作为其他注解的元注解,如@Controller、@Service、@Repository等。
6、@Configuration
这是一个组合注解,相当于@Component和@Scope(“singleton”)的结合。它表示这是一个配置类,可以使用@Bean注解定义需要注册到spring容器中的bean。它可以用在任何类上,也可以作为其他注解的元注解,如@SpringBootConfiguration等。
7、@Bean
这是一个方法级别的注解,表示该方法返回的对象是一个bean,需要注册到spring容器中。它只能用在被@Configuration或@Component等注解标记的类中。它有以下几个属性:
- name或value:指定bean的名称或名称数组,默认为方法名。
- initMethod:指定bean的初始化方法名,默认为空。
- destroyMethod:指定bean的销毁方法名,默认为"(inferred)",表示自动推断。
- autowire:指定bean的自动装配模式,默认为Autowire.NO。
- autowireCandidate:指定bean是否是自动装配候选者,默认为true。
- primary:指定bean是否是首选候选者,默认为false。
8、@Import
这是一个类级别的注解,表示导入其他配置类或组件类,并注册为bean12。它可以用在任何类上,也可以作为其他注解的元注解,如@EnableAutoConfiguration等。它有以下几种用法:
- @Import(Class>…):导入一个或多个配置类或组件类,并注册为bean。
- @Import(ImportSelector.class):导入一个实现了ImportSelector接口的类,并根据其返回值导入对应的配置类或组件类,并注册为bean。
- @Import(ImportBeanDefinitionRegistrar.class):导入一个实现了ImportBeanDefinitionRegistrar接口的类,并根据其逻辑注册对应的bean定义。
9、@ImportResource
这是一个类级别的注解,表示导入一个或多个XML配置文件,并将其中定义的bean注册到spring容器中12。它可以用在任何类上,也可以作为其他注解的元注解。它有以下两个属性:
- value或locations:指定要导入的XML配置文件的路径或路径数组。
- reader:指定用于读取XML配置文件的BeanDefinitionReader实现类,默认为XmlBeanDefinitionReader。
10、@Autowired
这是一个字段级别或方法级别的注解,表示自动装配依赖的bean12。它可以用在任何字段或方法上,也可以作为其他注解的元注解。它有以下两个属性:
- required:指定依赖的bean是否必须存在,默认为true。
- value:指定依赖的bean的名称,默认为空。
二、Web MVC注解
1、@Controller
这是一个组合注解,相当于@Component和@ControllerAdvice的结合 。它表示这是一个控制器类,可以处理Web请求,并返回视图或数据。它可以用在任何类上,也可以作为其他注解的元注解,如@RestController等。
2、@RestController
这是一个组合注解,相当于@Controller和@ResponseBody的结合 。它表示这是一个REST风格的控制器类,可以处理Web请求,并返回JSON或XML格式的数据。它可以用在任何类上,也可以作为其他注解的元注解。
3、@RequestMapping
这是一个类级别或方法级别的注解,表示映射Web请求到对应的处理方法 。它可以用在任何类或方法上,也可以作为其他注解的元注解,如@GetMapping、@PostMapping等。它有以下几个属性:
- value或path:指定要映射的请求路径或路径数组。
- method:指定要映射的请求方法或方法数组,如GET、POST等。
- params:指定要映射的请求参数或参数数组,如"username"、"age!=10"等。
- headers:指定要映射的请求头或头数组,如"Accept=application/json"、"Content-Type=text/plain"等。
- consumes:指定要映射的请求内容类型或类型数组,如"application/json"、"text/plain"等。
- produces:指定要映射的响应内容类型或类型数组,如"application/json"、"text/plain"等。
- name:指定映射的名称,默认为空。
4、@GetMapping
这是一个组合注解,相当于@RequestMapping(method = RequestMethod.GET)的结合 。它表示映射GET请求到对应的处理方法。它可以用在任何方法上,也可以作为其他注解的元注解。它有以下几个属性:
- value或path:指定要映射的请求路径或路径数组。
- params:指定要映射的请求参数或参数数组。
- headers:指定要映射的请求头或头数组。
- consumes:指定要映射的请求内容类型或类型数组。
- produces:指定要映射的响应内容类型或类型数组。
- name:指定映射的名称,默认为空。
5、@PostMapping
这是一个组合注解,相当于@RequestMapping(method = RequestMethod.POST)的结合 。它表示映射POST请求到对应的处理方法。它可以用在任何方法上,也可以作为其他注解的元注解。它有以下几个属性:
- value或path:指定要映射的请求路径或路径数组。
- params:指定要映射的请求参数或参数数组。
- headers:指定要映射的请求头或头数组。
- consumes:指定要映射的请求内容类型或类型数组。
- produces:指定要映射的响应内容类型或类型数组。
- name:指定映射的名称,默认为空。
三、数据访问注解
1、@Repository
这是一个组合注解,相当于@Component和@RepositoryDefinition的结合 。它表示这是一个仓库类,用于封装数据访问逻辑。它可以用在任何类上,也可以作为其他注解的元注解,如@JpaRepository等。它有以下两个属性:
- value:指定仓库的名称,默认为空。
- transactionManagerRef:指定事务管理器的引用,默认为空。
2、@JpaRepository
这是一个组合注解,相当于@Repository和@QueryByExampleExecutor的结合 。它表示这是一个基于JPA的仓库接口,可以继承CrudRepository或PagingAndSortingRepository,并提供一些额外的方法,如saveAndFlush、deleteInBatch等。它可以用在任何接口上,也可以作为其他注解的元注解。它有以下两个属性:
- value:指定仓库操作的实体类,默认为空。
- transactionManagerRef:指定事务管理器的引用,默认为空。
3、@Query
这是一个方法级别的注解,表示使用自定义的查询语句来执行数据访问操作 。它可以用在任何方法上,也可以作为其他注解的元注解。它有以下几个属性:
- value或nativeQuery:指定查询语句或原生查询语句,默认为空。
- countQuery或countProjection:指定用于分页查询时计算总数的查询语句或投影字段,默认为空。
- name:指定命名查询的名称,默认为空。
- countName:指定用于分页查询时计算总数的命名查询的名称,默认为空。
- clearAutomatically:指定是否在执行更新或删除操作后自动清除持久化上下文,默认为false。
- flushAutomatically:指定是否在执行更新或删除操作前自动刷新持久化上下文,默认为false。
4、@Param
这是一个参数级别的注解,表示将方法参数绑定到查询语句中的占位符或命名参数 。它只能用在被@Query等注解标记的方法中。它有以下一个属性:
- value:指定参数绑定到查询语句中的占位符或命名参数,默认为空。
5、@Modifying
这是一个方法级别的注解,表示该方法执行更新或删除操作 。它只能用在被@Query等注解标记的方法中。它有以下两个属性:
- clearAutomatically:指定是否在执行更新或删除操作后自动清除持久化上下文,默认为false。
- flushAutomatically:指定是否在执行更新或删除操作前自动刷新持久化上下文,默认为false。
6、@Transactional
这是一个类级别或方法级别的注解,表示该类或方法需要进行事务管理 。它可以用在任何类或方法上,也可以作为其他注解的元注解。它有以下几个属性:
- value或transactionManager:指定事务管理器的名称或引用,默认为空。
- propagation:指定事务传播行为,默认为Propagation.REQUIRED。
- isolation:指定事务隔离级别,默认为Isolation.DEFAULT。
- timeout:指定事务超时时间(秒),默认为-1(不超时)。
- readOnly:指定事务是否只读,默认为false。
- rollbackFor或rollbackForClassName:指定需要回滚事务的异常类或类名数组,默认为空(所有异常都回滚)。
- noRollbackFor或noRollbackForClassName:指定不需要回滚事务的异常类或类名数组,默认为空(所有异常都回滚)。
7、@Cacheable
这是一个方法级别的注解,表示该方法的返回值需要缓存 。它可以用在任何方法上,也可以作为其他注解的元注解。它有以下几个属性:
- value或cacheNames:指定缓存的名称或名称数组,默认为空。
- key:指定缓存的键,默认为方法参数的哈希值。
- keyGenerator:指定缓存的键生成器,默认为空。
- cacheManager:指定缓存管理器的名称或引用,默认为空。
- cacheResolver:指定缓存解析器的名称或引用,默认为空。
- condition:指定缓存的条件,只有满足条件才进行缓存,默认为空。
- unless:指定缓存的否定条件,只有不满足条件才进行缓存,默认为空。
- sync:指定是否使用同步模式进行缓存,默认为false。
四、测试注解
1、@SpringBootTest
这是一个类级别的注解,表示该类是一个springboot测试类,可以加载完整的springboot应用上下文 。它可以用在任何类上,也可以作为其他注解的元注解。它有以下几个属性:
- value或properties:指定要添加或覆盖的配置属性或属性数组,默认为空。
- classes:指定要加载的配置类或类数组,默认为空。
- webEnvironment:指定Web环境的类型,默认为WebEnvironment.MOCK。
- args:指定要传递给springboot应用的命令行参数或参数数组,默认为空。
2、@RunWith
这是一个类级别的注解,表示使用指定的运行器来执行测试类 。它可以用在任何类上,也可以作为其他注解的元注解。它有以下一个属性:
3、@Test
这是一个方法级别的注解,表示该方法是一个测试方法,需要被运行器执行 。它可以用在任何方法上,也可以作为其他注解的元注解。它有以下两个属性:
- expected:指定期望抛出的异常类,默认为None.class(不期望抛出异常)。
- timeout:指定测试方法的超时时间(毫秒),默认为0(不超时)。
4、@Before
这是一个方法级别的注解,表示该方法需要在每个测试方法之前执行 。它可以用在任何方法上,也可以作为其他注解的元注解。
5、@After
这是一个方法级别的注解,表示该方法需要在每个测试方法之后执行 。它可以用在任何方法上,也可以作为其他注解的元注解。
6、@BeforeClass
这是一个静态方法级别的注解,表示该方法需要在所有测试方法之前执行一次 。它只能用在静态方法上,也可以作为其他注解的元注解。
7、@AfterClass
这是一个静态方法级别的注解,表示该方法需要在所有测试方法之后执行一次 。它只能用在静态方法上,也可以作为其他注解的元注解。
8、@MockBean
这是一个字段级别或方法级别的注解,表示该字段或方法返回值需要被模拟成一个bean,并注册到spring容器中 。它可以用在任何字段或方法上,也可以作为其他注解的元注解。它有以下两个属性:
- name:指定模拟bean的名称,默认为空。
- reset:指定模拟bean是否需要在每个测试方法之后重置,默认为MockReset.AFTER。
9、@SpyBean
这是一个字段级别或方法级别的注解,表示该字段或方法返回值需要被包装成一个spy对象,并注册到spring容器中 。它可以用在任何字段或方法上,也可以作为其他注解的元注解。它有以下两个属性:
- name:指定spy对象的名称,默认为空。
- reset:指定spy对象是否需要在每个测试方法之后重置,默认为MockReset.AFTER。
总结
springboot提供了许多方便实用的注解,可以帮助开发者快速配置、启动、管理、访问和测试springboot应用。学习起来!