SpringBoot中必须掌握的27个注解

合集下载

Springboot之@EnableConfigurationProperties注解

Springboot之@EnableConfigurationProperties注解

Springboot之@EnableConfigurationProperties注解@EnableConfigurationProperties 注解的作⽤是:让使⽤了 @ConfigurationProperties 注解的类⽣效,并且将该类注⼊到 IOC 容器中,交由 IOC 容器进⾏管理⼀、使⽤ @ConfigurationProperties + @Component 注解如果⼀个类只配置了 @ConfigurationProperties 注解,⽽没有使⽤ @Component 注解将该类加⼊到 IOC 容器中,那么它就不能完成 xxx.properties 配置⽂件和 Java Bean 的数据绑定1、application.properties=xiaomaomaoxiaomao.age=272、MyConfigurationProperties 这个实体类中必须要加上 @Component ,使这个类注⼊到 IOC 容器中,否则就⽆法从容器中获取到这个类的对象实例@Component@ConfigurationProperties(prefix = "xiaomao")public class MyConfigurationProperties {// 省略 get、set、toString⽅法private String name;private Integer age;private String gender;}3、HelloController@RestControllerpublic class HelloController {@Autowiredprivate MyConfigurationProperties config;@GetMapping("/config")private String testConfigurationProperties(){System.out.println(config);return "SUCCESS";}}4、测试结果MyConfigurationProperties{name='xiaomaomao', age=27, gender='null'}⼆、使⽤ @EnableConfigurationProperties 注解1、添加⼀个 HelloService 类// 注⼊到 IOC 容器中,交由 Spring 进⾏管理@Service// 该注解的作⽤是使 MyConfigurationProperties 这个类上标注的 @ConfigurationProperties 注解⽣效,并且会⾃动将这个类注⼊到 IOC 容器中@EnableConfigurationProperties(MyConfigurationProperties.class)public class HelloServiceImpl implements HelloService {}2、MyConfigurationProperties 有了 @EnableConfigurationProperties 注解之后该实体类就不需要加上 @Component 注解了@ConfigurationProperties(prefix = "xiaomao")public class MyConfigurationProperties {// 省略 get、set、toString ⽅法private String name;private Integer age;private String gender;}3、HelloController.java@RestControllerpublic class HelloController {@Autowiredprivate MyConfigurationProperties config;@GetMapping("/config")private String testConfigurationProperties(){System.out.println(config);return "SUCCESS";}}4、测试结果MyConfigurationProperties{name='xiaomaomao', age=27, gender='null'}三、结论 如果要使 xxx.properties 配置⽂件与 Java Bean 动态绑定,那么就必须将这个 Java Bean 加⼊到容器中,并且需要在该类上使⽤ @ConfigurationProperties 注解@EnableConfigurationProperties(A.class)的作⽤就是如果 A 这个类上使⽤了 @ConfigurationProperties 注解,那么 A 这个类会与 xxx.properties 进⾏动态绑定,并且会将 A 这个类加⼊ IOC 容器中,并交由 IOC 容器进⾏管理。

springboottest注解

springboottest注解

springboottest注解
SpringBootTest注解就像是却把Junit工具的功能完全嵌入到了SpringBoot应用中,它主要包括一下功能:
1、自动扫描@SpringBootApplication或@SpringBootTest注解的类,自动装载SpringBoot应用程序的上下文,并加载所需的Junit 文件。

2、可以根据SpringBoot应用程序的结构自动更新要加载的文件,使得测试更加准确可靠。

3、可以使用@Autowired注解自动注入需要的实例,从而模拟应用程序中运行时环境。

4、可以让测试类注入SpringBoot应用程序中使用的资源和组件,以模拟应用程序的运行环境,并执行测试代码。

5、SpringBootTest注解可以将整个SpringBoot应用程序打包成可执行的Jar,从而更快更简单地完成单元测试。

因此,SpringBootTest注解可以使开发人员更加方便快捷地将JUnit功能集成到SpringBoot应用程序中。

它可以自动装载SpringBoot的上下文环境,并可以让测试类自动注入应用程序中使用的资源和组件,还可以将整个应用程序打包成可执行的Jar包,从而更快更简单地完成单元测试,大大减少了测试开发总体工作量,保证了测试的准确性和可靠性,减轻了开发人员的工作压力。

总体来说,SpringBootTest注解的功能极大地提高了SpringBoot应用程序开发的效率,可以让开发人员快捷高效地完成开发任务。

Spring、Springboot常用注解:@Qualifier(不定时更新)

Spring、Springboot常用注解:@Qualifier(不定时更新)

16 @Override
17 public Member getMemberById(Long mid){
18
//业务代码2
19 }
20 }
21 //调用类
22 @Controller("/member")
23 public class MemberController{
24 @Autowired
25 @Qualifier("memberService2") //此处如果不使用该注解则报错,原因就是容器不知道注入哪一个实现类
8 @Override
9 public Member getMemberById(Long mid){
10
//业务代码1
11 }
12 }
13 //实现类二
14 @Service("memberService2")
15 public class MemberServiceImpl2 implements MemberService{
30
return new Response().setDate(memberService.getMemberById(mid));
31 }
32 }
View Code

26 private MemberService memberService;
27
28 @PostMapping(value = "/getMember",produces ={MediaType..APPLICATION_JSON_VALUE})
29 public Response getMember(Long mid){
1 //接口

1.1SpringBoot环境配置和常用注解

1.1SpringBoot环境配置和常用注解

1.1SpringBoot环境配置和常⽤注解Spring Boot常⽤注解:@Service: 注解在类上,表⽰这是⼀个业务层bean@Controller:注解在类上,表⽰这是⼀个控制层bean@Repository: 注解在类上,表⽰这是⼀个数据访问层bean@Component:注解在类上,表⽰通⽤bean ,value不写默认就是类名⾸字母⼩写@Autowired:按类型注⼊.默认属性required= true;当不能确定Spring 容器中⼀定拥有某个类的Bean 时,可以在需要⾃动注⼊该类Bean 的地⽅可以使⽤@Autowired(required = false),这等于告诉Spring:在找不到匹配Bean时也不抛出BeanCreationException 异常。

@Autowired 和 @Qualifier 结合使⽤时,⾃动注⼊的策略就从byType 转变byName 了。

@Autowired可以对成员变量、⽅法以及构造函数进⾏注释,⽽@Qualifier 的标注对象是成员变量、⽅法⼊参、构造函数⼊参。

正是由于注释对象的不同,所以 Spring 不将 @Autowired 和 @Qualifier 统⼀成⼀个注释类。

@Resource:按名称装配区别:@Resource默认按照名称⽅式进⾏bean匹配,@Autowired默认按照类型⽅式进⾏bean匹配@Resource(importjavax.annotation.Resource;)是J2EE的注解,@Autowired(importorg.springframework.beans.factory.annotation.Autowired;)是Spring的注解@Configuration:注解在类上,表⽰这是⼀个IOC容器,相当于spring的配置⽂件,java配置的⽅式。

IOC容器的配置类⼀般与@Bean 注解配合使⽤,⽤@Configuration 注解类等价与 XML 中配置 beans,⽤@Bean 注解⽅法等价于 XML 中配置 bean。

Spring常用的一些注解说明

Spring常用的一些注解说明

Spring常⽤的⼀些注解说明@Configuration从Spring3.0,@Configuration⽤于定义配置类,可替换xml配置⽂件,被注解的类内部包含有⼀个或多个被@Bean注解的⽅法。

这些⽅法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进⾏扫描,并⽤于构建bean定义。

@Bean@Bean注解⽤于告诉⽅法,产⽣⼀个Bean对象,然后这个Bean对象交给Spring管理。

产⽣这个Bean对象的⽅法Spring只会调⽤⼀次,随后这个Spring将会将这个Bean对象放在⾃⼰的IOC容器中。

SpringIOC 容器管理⼀个或者多个bean,这些bean都需要在@Configuration注解下进⾏创建,在⼀个⽅法上使⽤@Bean注解就表明这个⽅法需要交给Spring进⾏管理。

@Autowired、@Resource@Resource和@Autowired注解都是⽤来实现依赖注⼊的。

只是@AutoWried按by type⾃动注⼊,⽽@Resource默认按byName⾃动注⼊。

♣ @Autowired@Autowired具有强契约特征,其所标注的属性或参数必须是可装配的。

如果没有Bean可以装配到@Autowired所标注的属性或参数中,⾃动装配就会失败,抛出NoSuchBeanDefinitionException.@Autowired可以对类成员变量、⽅法及构造函数进⾏标注,让 spring 完成 bean ⾃动装配的⼯作。

@Autowired 默认是按照类去匹配,配合 @Qualifier 指定按照名称去装配 bean。

♣ @Resource@Resource是JDK提供的注解,有两个重要属性,分别是name和type。

@Resource依赖注⼊时查找bean的规则既不指定name属性,也不指定type属性,则⾃动按byName⽅式进⾏查找。

springboot使用自定义注解注入参数值

springboot使用自定义注解注入参数值

springboot使用自定义注解注入参数值在Spring Boot中,我们可以使用自定义注解来注入参数值,以简化代码编写和提高可读性。

通过自定义注解,我们可以将一些通用的参数值注入到方法中,而不需要重复的代码。

```javaimport ng.annotation.*;String value(;```接下来,我们需要创建一个注解处理器来实现参数的注入逻辑。

我们可以使用Spring Boot提供的接口HandlerMethodArgumentResolver,并实现其中的resolveArgument和supportsParameter方法。

```javaimport org.springframework.core.MethodParameter;importorg.springframework.web.bind.support.WebDataBinderFactory;importorg.springframework.web.context.request.NativeWebRequest;importorg.springframework.web.method.support.HandlerMethodArgumentReso lver;importorg.springframework.web.method.support.ModelAndViewContainer;public class CustomValueArgumentResolver implements HandlerMethodArgumentResolverpublic boolean supportsParameter(MethodParameter parameter) returnparameter.getParameterAnnotation(CustomValue.class) != null;}public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws ExceptionCustomValue customValue =parameter.getParameterAnnotation(CustomValue.class);String value = customValue.value(;return value;}```最后,我们需要配置Spring Boot,以便它能够使用我们自定义的注解处理器。

SpringBoot事务注解详解

SpringBoot事务注解详解

SpringBoot事务注解详解SpringBoot事务注解详解@Transactionalspring 事务注解1.简单开启事务管理@EnableTransactionManagement // 启注解事务管理,等同于xml配置⽅式的 <tx:annotation-driven />2.事务注解详解默认遇到throw new RuntimeException(“…”);会回滚需要捕获的throw new Exception(“…”);不会回滚指定回滚@Transactional(rollbackFor=Exception.class)public void methodName() {// 不会回滚throw new Exception("...");}指定不回滚@Transactional(noRollbackFor=Exception.class)public ItimDaoImpl getItemDaoImpl() {// 会回滚throw new RuntimeException("注释");}如果有事务,那么加⼊事务,没有的话新建⼀个(不写的情况下)@Transactional(propagation=Propagation.REQUIRED)容器不为这个⽅法开启事务@Transactional(propagation=Propagation.NOT_SUPPORTED)readOnly=true只读,不能更新,删除@Transactional (propagation = Propagation.REQUIRED,readOnly=true)设置超时时间@Transactional (propagation = Propagation.REQUIRED,timeout=30)设置数据库隔离级别@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)3.指定事务管理器spring Boot 使⽤事务⾮常简单,⾸先使⽤注解 @EnableTransactionManagement 开启事务⽀持后,然后在访问数据库的Service⽅法上添加注解 @Transactional 便可。

Spring核心注解

Spring核心注解

Spring注解使⽤场景启始版本模式注解@Repository数据仓储模式注解Spring Framework 2.0 @Component通⽤组件模式注解Spring Framework 2.5 @Service服务模式注解Spring Framework 2.5 @Controller Web控制器模式注解Spring Framework 2.5 @Configuration配置类模式注解Spring Framework 3.0装配注解@ImportResource替换XML元素<import>Spring Framework 2.5 @Import限定@Autowired依赖注⼊范围(导⼊对应的 @Configuration 标识类)Spring Framework 3.0 @ComponentScan扫描制定package下标注Spring模式注解的类Spring Framework 3.1依赖注⼊注解@Autowired Bean依赖注⼊,⽀持多种依赖查找⽅式Spring Framework 2.5 @Qualifier细粒度的@Autowired依赖查找⽅式Spring Framework 2.5 @Resource [JAVA注解]Bean依赖注⼊,仅⽀持名称依赖查找⽅式Spring Framework 2.5 Bean定义注解@Bean替换XML元素<bean/>Spring Framework 3.0 @DependsOn替换XML属性<bean depends-on="..."/>Spring Framework 3.0 @Lazy替代XML属性<bean lazy-init="true|false"/>Spring Framework 3.0 @Primary替换XML属性<bean primary="true|false"/>Spring Framework 3.0 @Role替换XML属性<bean role="..."/>Spring Framework 3.1 @Lookup替代XML属性<bean lookup-method="..."/>Spring Framework 4.1条件装配注解@Profile配置化条件装配Spring Framework 3.1 @Conditional编程条件装配Spring Framework 4.0配置属性注解@PropertySource配置属性抽象PropertySource注解Spring Framework 3.1 @PropertySources@PropertySource集合注解(实现 JAVA 8 @Repeatable相似的功能)Spring Framework 4.0⽣命周期回调注解@PostConstruct替换XML元素<bean init-method="..."/>或InitializingBean Spring Framework 2.5 @PreDestory替换XML元素<bean destory-method="..."/>或 DisposableBean Spring Framework 2.5注解属性注解@AliasFor别名注解属性,实现复⽤的⽬的Spring Framework 4.2性能注解@Indexed提升Spring模式注解的扫描效率(编译时会在classPath下⽣成 META-INF/ponents⽂件)Spring Framework 5.0Spring核⼼注解Spring核⼼注解归类如下:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SpringBoot中必须掌握的27个注解Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架,它不仅可以方便地创建生产级的Spring应用程序,还能轻松地通过一些注解配置与目前比较火热的微服务框架SpringCloud集成。

而Spring Boot之所以能够轻松地实现应用的创建及与其他框架快速集成,最核心的原因就在于它极大地简化了项目的配置,最大化地实现了“约定大于配置”的原则。

然而基于Spring Boot虽然极大地方便了开发,但是也很容易让人“云里雾里”,特别是各种注解很容易让人“知其然而不知其所以然。

所以,要想用好Spring Boot就必须对其提供的各类功能注解有一个全面而清晰地认识和理解。

一方面可以提高基于Spring Boot的开发效率,另一方面也是面试中被问及框架原理时所必需要掌握的知识点。

在接下来的内容中,小编就带大家一起来探究下Spring Boot的一些常用注解吧!一、Spring相关6个基础注解Spring Boot的有些注解也需要与Spring的注解搭配使用,这里小编梳理了在项目中与Spring Boot注解配合最为紧密的6个Spring基础框架的注解。

如1、@Configuration从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

2、@ComponentScan做过web开发的同学一定都有用过@Controller,@Service,@Repository注解,查看其源码你会发现,他们中有一个共同的注解@Component,没错@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。

3、@Conditional@Conditional是Spring4新提供的注解,通过@Conditional注解可以根据代码中设置的条件装载不同的bean,在设置条件注解之前,先要把装载的bean类去实现Condition 接口,然后对该实现接口的类设置是否装载的条件。

Spring Boot注解中的@ConditionalOnProperty、@ConditionalOnBean等以@Conditional*开头的注解,都是通过集成了@Conditional来实现相应功能的。

4、@Import通过导入的方式实现把实例加入springIOC容器中。

可以在需要时将没有被Spring 容器管理的类导入至Spring容器中。

5、@ImportResource和@Import类似,区别就是@ImportResource导入的是配置文件。

6、@Component@Component是一个元注解,意思是可以注解其他类注解,如@Controller @Service @Repository。

带此注解的类被看作组件,当使用基于注解的配置和类路径扫描的时候,这些类就会被实例化。

其他类级别的注解也可以被认定为是一种特殊类型的组件。

比如@Controller 控制器(注入服务)、@Service服务(注入dao)、@Repository dao (实现dao访问)。

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注,作用就相当于 XML配置,<bean id="" class=""/>。

二、Spring Boot最核心的21个注解说完与Spring Boot密切相关的几个Spring基础注解后,下面我们就再一起看看Spring Boot提供的核心注解的内容吧!1、@SpringBootApplication这个注解是Spring Boot最核心的注解,用在 Spring Boot的主类上,标识这是一个Spring Boot 应用,用来开启Spring Boot 的各项能力。

实际上这个注解是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的组合。

由于这些注解一般都是一起使用,所以Spring Boot提供了一个统一的注解@SpringBootApplication。

2、@EnableAutoConfiguration允许 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径下的包或者类来配置 Spring Bean。

如:当前类路径下有 Mybatis 这个 JAR 包,MybatisAutoConfiguration 注解就能根据相关参数来配置 Mybatis 的各个 Spring Bean。

@EnableAutoConfiguration实现的关键在于引入了AutoConfigurationImportSelector,其核心逻辑为Imports方法,逻辑大致如下:从配置文件META-INF/spring.factories加载所有可能用到的自动配置类;去重,并将exclude和excludeName属性携带的类排除;过滤,将满足条件(@Conditional)的自动配置类返回;3、@SpringBootConfiguration这个注解就是 @Configuration 注解的变体,只是用来修饰是 Spring Boot 配置而已,或者可利于 Spring Boot 后续的扩展。

4、@ConditionalOnBean@ConditionalOnBean(A.class)仅仅在当前上下文中存在A对象时,才会实例化一个Bean,也就是说只有当A.class 在spring的applicationContext中存在时,这个当前的bean才能够创建。

5、@ConditionalOnMissingBean组合@Conditional注解,和@ConditionalOnBean注解相反,仅仅在当前上下文中不存在A对象时,才会实例化一个Bean。

6、@ConditionalOnClass组合 @Conditional 注解,可以仅当某些类存在于classpath上时候才创建某个Bean。

7、@ConditionalOnMissingClass组合@Conditional注解,和@ConditionalOnMissingClass注解相反,当classpath 中没有指定的 Class才开启配置。

8、@ConditionalOnWebApplication组合@Conditional 注解,当前项目类型是 WEB 项目才开启配置。

当前项目有以下 3 种类型:ANY(任何Web项目都匹配)、SERVLET(仅但基础的Servelet项目才会匹配)、REACTIVE (只有基于响应的web应用程序才匹配)。

9、@ConditionalOnNotWebApplication组合@Conditional注解,和@ConditionalOnWebApplication 注解相反,当前项目类型不是 WEB 项目才开启配置。

10、@ConditionalOnProperty组合 @Conditional 注解,当指定的属性有指定的值时才开启配置。

具体操作是通过其两个属性name以及havingValue来实现的,其中name用来从application.properties 中读取某个属性值,如果该值为空,则返回false;如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。

如果返回值为false,则该configuration不生效;为true则生效。

11、@ConditionalOnExpression组合 @Conditional 注解,当 SpEL 表达式为 true 时才开启配置。

12、@ConditionalOnJava组合@Conditional 注解,当运行的 Java JVM 在指定的版本范围时才开启配置。

13、@ConditionalOnResource组合 @Conditional 注解,当类路径下有指定的资源才开启配置。

14、@ConditionalOnJndi组合 @Conditional 注解,当指定的 JNDI 存在时才开启配置。

15、@ConditionalOnCloudPlatform组合 @Conditional 注解,当指定的云平台激活时才开启配置。

16、@ConditionalOnSingleCandidate组合 @Conditional 注解,当指定的 class 在容器中只有一个 Bean,或者同时有多个但为首选时才开启配置。

17、@ConfigurationPropertiesSpring Boot可使用注解的方式将自定义的properties文件映射到实体bean中,比如config.properties文件。

18、@EnableConfigurationProperties当@EnableConfigurationProperties注解应用到你的@Configuration时,任何被@ConfigurationProperties注解的beans将自动被Environment属性配置。

这种风格的配置特别适合与SpringApplication的外部YAML配置进行配合使用。

19、@AutoConfigureAfter用在自动配置类上面,表示该自动配置类需要在另外指定的自动配置类配置完之后。

20、@AutoConfigureBefore这个和@AutoConfigureAfter注解使用相反,表示该自动配置类需要在另外指定的自动配置类配置之前。

21、@AutoConfigureOrderSpring Boot 1.3.0中有一个新的注解@AutoConfigureOrder,用于确定配置加载的优先级顺序。

相关文档
最新文档