首页 > 编程语言 > 详细

spring boot常用注解

时间:2020-03-20 17:55:03      阅读:50      评论:0      收藏:0      [点我收藏+]

启动注解

@SpringBootApplication

相当于 @Configuration、@EnableAutoConfiguration 、 @ComponentScan 三个的作用

扫描包注解

@ComponentScan

1、工程中Application类的位置。默认情况下就不需要配置@ComponentScan这个注解了。 因为Application类,在启动的时候,默认是加载和Application类所在同一个目录下的所有类,包括所有子目录下的类。所以一般情况下,启动类的位置是有特殊要求的。 必须放在所有包的根目录中。

2、假设写的模块,编译成了jar包,并且上传到了私服。在pom中以第三方包的形式依赖进来。
如果jar包中也存在注解,为了spring boot启动的时候,注解可以被扫描到,需要做的就是
在spring boot启动类中配置上 @ComponentScan注解,并且指定第三方jar包的根路径。
所以一般情况下,公司级的第三包前面的路径名最好一直。比方说 com.pa 这样就不会出现遗漏的情况。

3、还有一个说法是,第三方包中最好不要使用注解,因为注解会带来调用者使用不方便,需要配置扫描注解等。如果遗漏指定包扫描路径,那么就会出bean加载失败的情况。所以我们看到的最基础的第三方jar包,几乎是没有注解的。

@Configuration

1、表示这个类是一个spring 配置类,一般这里面会定义Bean,会把这个类中bean加载到spring容器中。

2、2、可以与@Conditional相关的注解联合使用来实现@Configuration修饰类的条件加载

@EnableAutoConfiguration

如果被依赖包中在src/main/resource/META-INF中定义了spring.factories文件,并且在文件中定义了org.springframework.boot.autoconfigure.EnableAutoConfiguration属性,属性内定义了多个完整的类路径。springboot中的自动加载机制就是通过这种方式出现的。

 工作原理:https://www.jianshu.com/p/464d04c36fb1

在依赖包中使用了@EnableAutoConfiguration注解,那么该注解就会去他所有pom的依赖项中逐项扫描其内部是否包含该文件,并且会自动加载内部定义的所有类。而springboot自身的所有对象都是通过该种方式来实现创建的。

@ComponentScan和@EnableAutoConfiguration区别

1、对于@Configuration和@Conditional联合定义的类,如果出现了@Configuration类的嵌套,那么外面的@Conditional起作用的范围是不一样的。@EnableAutoConfiguration是都起作用,但是@ComponentScan只对外面的起作用,里面还是照样会执行到,要特别注意。

http://www.cnblogs.com/diegodu/p/7889379.html

 

范围类注解

@Scope

https://blog.csdn.net/zalan01408980/article/details/82904126

 

 创建bean对象

@Component

无差别的bean对象,下面的注解其实都是在该注解的基础上实现的,用于表示特殊用途的bean对象。

@Controller和@RestController

外部访问请求对象,其中@Controller默认返回的视图,而@RestController默认返回的是字符串。 @RestController是在@Controller基础上定义加上@ResponseBody实现的。

请求相关的注解还有下面这些

@service

表示服务类的bean对象

@repository

表示存储类的bean对象

 

对象注入

@Resource与@Autowired

1、共同点

两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

2、不同点

(1)@Autowired

@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。

(2)@Resource

@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。

所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

注:最好是将@Resource放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。

@Resource装配顺序:

①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。

 

web请求类

@RequestMapping

该注解通常与@RestController搭配使用,使用该注解可以定义请求路径,既可以指定多个路径,也可以使用通配符定义路径。也可以在路径中使用占位符。也可以限制请求的方式和参数。

https://blog.csdn.net/zalan01408980/article/details/82904126

@FeignClient

springcloud中提供的web请求注解,该注解用于修饰一个接口。可以指定请求的根路径,请求名。与@GetMapping等方法注解搭配使用。

spring boot常用注解

原文:https://www.cnblogs.com/suntp/p/9204163.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!