目录
前言:
常用注解总结
@SpringBootApplication
@ServletComponentScan
@Component
@Bean
@Configuration
@ConfigurationProperties
@Value
@SpringBootConfiguration
@Conditional
@ConditionalOnBean
@ConditionalOnMissingBean
@MapperScan
@ImportResource @Import @PropertySource 这三个注解都是用来导入自定义的一些配置文件。
@Controller
@RestController
@RequestMapping(value="",method= RequestMethod.GET )
@CrossOrigin(origins = "", maxAge = 1000)
@Autowired
@EnableCaching
@PathVariable
@Service
@Resource
@Repository
@Transactional
@Qualifier
@Async与@EnableAsync
@Scheduled与@EnableScheduling
@ControllerAdvice
@ExceptionHandler
@PostContruct
参考文章
前言:
小编今天想总结一下SpringBoot常用注解。(个人版本)
常用注解总结
**@SpringBootApplication **
@SpringBootApplication是一个复合注解,包含@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan这三个注解。
标注当前类是一个配置类。
这三个注解的作用分别为:
-
@SpringBootConfiguration:标注当前类是配置类,这个注解继承自@Configuration。并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。
-
@EnableAutoConfiguration:是自动配置的注解,这个注解会根据我们添加的组件jar来完成一些默认配置,我们做微服时会添加spring-boot-starter-web这个组件jar的pom依赖,这样配置会默认配置springmvc 和tomcat。
-
@ComponentScan:扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。等价于context:component-scan的xml配置文件中的配置项
**@ServletComponentScan **
Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,这样通过注解servlet ,拦截器,监听器的功能而无需其他配置,所以这次相中使用到了filter的实现,用到了这个注解。
** **
@Component
** 一般注解在类上,把普通类实例化到spring容器中。可以说很多注解都是基于这个注解的。**
@Bean
一般标记在方法上,用@Bean标注方法等价于XML中配置bean,这个方法一般返回一个实体对象,告诉spring这里产生一个对象,然后这个对象会交给Spring管理。产生这个对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的容器中
@Configuration
** 这是Spring3.0一个注解,用来代替 applicationContext.xml 配置文件,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。(其实就是靠@Component注解)**
@ConfigurationProperties
将配置文件中的参数映射成一个对象,通过prefix来设定前缀,然后将后面的和对象的属性名一致就能实现注入(当然这个对象需要注入的属性需要提供get和set方法 – – – 因为spring底层其实就是通过反射调用该对象的set方法)
实例:
@ConfigurationProperties(prefix = “spring.datasource.test1”)
public class Datasource1 {
private String url;
private String username;
private String password;
get – – set方法
}
application.properties:
spring.datasource.test1.url=jdbc:mysql://localhost:3307/multipledatasource1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
spring.datasource.test1.username=root
spring.datasource.test1.password=root
spring.datasource.test1.driver-class-name=com.mysql.cj.jdbc.Driver
@Value
value的作用其实和ConfigurationProperties作用差不多,就是读取配置文件中参数的值,但是value是放在变量上面的,且是单值读取,还有一点就是value标注的变量并不需要和配置文件的参数名字一致。
语法:
@Value(“${参数}”)
private String 变量名字
application.properties:
参数=值
注意:配置文件中的参数和value表达式中的参数名字是要保持一致的
@SpringBootConfiguration
**这个注解就是 @Configuration 注解的变体,只是用来修饰是 Spring Boot 配置而已,或>者可利于 Spring Boot 后续的扩展。 **
@Conditional
这是 Spring 4.0 添加的新注解,用来标识一个 Spring Bean 或者 Configuration 配置文>件,当满足指定的条件才开启配置。
** @ConditionalOnBean**
** 组合 @Conditional 注解,当容器中有指定的 Bean 才开启配置。**
@ConditionalOnMissingBean
组合 @Conditional 注解,和 @ConditionalOnBean 注解相反,当容器中没有指定的 Bean 才开启配置。
** @MapperScan**
@MapperScan:spring-boot支持mybatis组件的一个注解,通过此注解指定mybatis接口类的路径,即可完成对mybatis接口的扫描。
@ImportResource @Import @PropertySource 这三个注解都是用来导入自定义的一些配置文件。
- @ImportResource(locations={}) 导入其他xml配置文件,需要标准在主配置类上。导入property的配置件
- ** @PropertySource指定文件路径,这个相当于使用spring的<importresource/>标签来完成配置项的引入。**
- @import注解是一个可以将普通类导入到spring容器中做管理
**@Controller **
表示当前是一个控制类,一般情况下与RequestMapping @ReponseBody 结合使用。
**@RestController **
:是@Controller 和@ResponseBody的结合,一个类被加上@RestController 注解,数据接口中就不再需@ResponseBody。
** 返回的直接是json数据。**
** 举个栗子:**
** **
**@RequestMapping(value="",method= RequestMethod.GET
)**
** 一开始的时候我们经常使用@RequestMapping 这个注解用来定义接口和请求方式,这样的写法挺繁琐,Restful方式的写法应运而生。**
**@CrossOrigin(origins = "", maxAge = 1000) **
这个方式是为了解决跨域问题而产生的,可以为整个Controller配置启动跨越也可以在方法级别启用。
@Autowired
是spring的自动装配,这个注解可以用到构造器,变量域,方法,注解类型上。
当我们需要从bean 工厂中获取一个bean时,Spring会自动为我们装配该bean中标记为@Autowired的元素。
@EnableCaching
这个注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。其作用相当于spring配置文件中的cache manager标签。
@PathVariable
这个是路径变量注解。一般情况可以用这个注解获取接口后面的参数
**举个例子:下面这是一个简单的接口, 在浏览上访问这个接口 http://localhost:8080/testApi/13,此时我在这个接口里面就能获取到13这个值。 **
1
2
3
4
5
6
7 1@RequestMapping(value="testApi/{id}")
2
3public void testUrl(@PathVariable("id") int id){
4
5
6}
7
@Service
一般情况下我们会将业务逻辑类加上这个注解交由Spring管理,事务的切面也会配置在这一层。
@Resource
@Resource和@Autowired一样都可以用来装配bean,都可以标注字段上,或者方法上。 @resource注解不是spring提供的,是属于J2EE规范的注解。两个之前的区别就是匹配方式上有点不同,@Resource默认按照名称方式进行bean配,@Autowired默认按照类型方式进行bean匹配。
举个例子:
@Resource(type = ShiroService.class, name = "shiroService") private ShiroService shiroService;
@Repository
@Repository注解类作为DAO对象,管理操作数据库的对象。
总得来看,@Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理
@Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。通过这些注解的分层管理,就能将请求处理,义务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发。
所以我们在正常开发中,如果能用@Service, @Controller, @Repository其中一个标注这个类的定位的时候,就不要用@Component来标注。
@Transactional
@Transactional: 通过这个注解可以声明事务,可以添加在类上或者方法上。
在spring boot中 不用再单独配置事务管理,一般情况是我们会在servcie层添加了事务注解,即可开启事务。要注意的是,事务的开启只能在public 方法上。并且主要事务切面的回滚条件。正常我们配置rollbackfor exception时 ,如果在方法里捕获了异常就会导致事务切面配置的失效。
@Qualifier
@Autowired是根据类型进行自动装配的。如果当spring上下文中存在不止一个A类型的bean时,就会抛出 BeanCreationException异常;如果Spring上下文中不存在A类型的bean,而且我们又使用A类型,也会抛出BeanCreationException异常。针对存在多个A类型的Bean,我们可以联合使用@Qualifier和@Autowired来解决这些问题。
1
2
3
4
5
6 1@Autowried
2
3@Qualifier("adminDAO")
4
5private AdminDAO adminDAO;
6
@Async与@EnableAsync
其中@Async表示这个方法为异步方法;@EnableAsync这个注解需要加在启动类上,表示支持异步操作;默认不起作用。
@Scheduled与@EnableScheduling
** @EnableScheduling这个注解需要加在启动类上,表示支持定时任务。**
@ControllerAdvice
包含@Component。可以被扫描到。统一处理异常。
@ExceptionHandler
用在方法上面表示遇到这个异常就执行以下方法
@PostContruct
在构造器后执行,相当于 @Bean 的 initMethod
参考文章
https://www.cnblogs.com/nihaorz/p/10528121.html
**https://blog.csdn.net/tuesdayma/article/details/81029539**