SpringBoot常用注解

目录

 

前言:

常用注解总结

@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这个值。  

@RequestMapping(value="testApi/{id}")

public void testUrl(@PathVariable("id") int id){


}

@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来解决这些问题。
 

@Autowried 

@Qualifier("adminDAO") 

private AdminDAO adminDAO;

@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 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值