SpringBoot核心注解@SpringBootApplication和其他几个SpringBoot编写中常见注解

SpringBoot为一款整合框架的框架,该框架遵循“习惯优于配置”的原则,减少了xml繁琐的配置,支持全注解配置。

一、核心注解:@SpringBootApplication

其核心注解@SpringBootApplication为三个注解的组合!
@SpringBootApplication为SpringBoot核心启动类上的注解,点进去可知其由三个注解组合而成。
在这里插入图片描述

这三个注解分别是:
@SpringBootConfiguration
@ComponentScan
@EnableAutoConfiguration

(一)@SpringBootConfiguration:

该注解由Spring原生注解@Configuraction封装而成。
在这里插入图片描述
带有@Configuration的类,可以用来代替 applicationContext.xml 配置文件,而配置文件内部的数据注入,可通过其内部的几个注解-如下,进行实现:
1、@Bean
用来代替 XML 配置文件里面的bean配置。
2、@ImportResource
如果有些通过类的注册方式配置不了的,可以通过这个注解引入额外的 XML 配置文件,有些老的配置文件无法通过 @Configuration 方式配置的非常管用。
3、@Import
用来引入额外的一个或者多个 @Configuration 修饰的配置文件类。

(二)@ComponentScan:

该注解主要用来开启组件扫描,可以扫描该注解标注的类、以及该注解标注的类的目录路径下的类,并将其实例注册添加到Spring容器中。
此处需注意,由于Spring仅仅整合了自己的注解,并没有接收Mybatis的注解,因此SpringBoot整合Mybatis时,需要额外添加注解:@MapperScan(“/指向mybatis的包路径”)
在这里插入图片描述
@ComponentScan时Spring用来代替配置文件中的 component-scan 配置,并且可重复注解,即可以配置多个,用来配置注册不同的子包。

(三)@EnableAutoConfiguration:

该注解主要用来提供自动装配,是这三个注解中最重要的一个注解。她是Spring Boot新添加的注解,提供了强大的自动依赖功能,是SpringBoot这么方便的大功臣。
在这里插入图片描述
自动装配原理:
@EnableAutoConfiguration注解的关键在于引入了AutoConfigurationImportSelector,其核心逻辑为selectImports方法,逻辑大致如下:
从配置文件META-INF/spring.factories加载所有可能用到的自动配置类;去重,并将exclude和excludeName属性携带的类排除;过滤,将满足条件(@Conditional)的自动配置类返回。

二、谈及@EnableAutoConfiguration,不得不说下springboot的核心思想“约定优于配置”:

一种节省配置的软件设计范式,要求springboot设计成针对于spring框架的一个脚手架。
由于spring开发中有很多与业务无关的一次性配置,比如:
(1)jar包管理依赖
(2)web.xml的维护
(3)Dispatch-Servlet.xml的维护
(4)项目需手动部署到web容器
(5)第三方组件集成到spring IOC时针对其配置项的维护。
而springboot却都基于“约定优于配置”的思想,完成了这些工作:
(1)其基于“spring-boot-starter”启动依赖,直接管理jar包版本
(2)如果当前项目依赖了web的jar包,springboot会自动内置tomcat容器来运行web项目,不再需要单独进行web部署。
(3)springboot的自动装配机制,也就是@EnableAutoConfiguration注解,会扫描spring.facotries识别配置类,进行bean的自动装载。
(4)springboot会默认加载resource目录下的application.yml(先)/application.properties(后、覆盖先)。

三、补充说明几个其他注解:

(一)@ResponseBody和@RequestBody

1、@RestController,该注解为表现层注解,内部整合了@Controller和@ResponseBody,@ResponseBody限定数据的返回值如为字符串类型则直接返回字符串,如为对象等其他类型,则必须转成json类型。

2、@RequestBody注解,专门接收json格式,在restful风格接收添加、更新的对象数据时使用,此时前端必须返回对象的json数据格式,否则会报错。

(二)@PathVariable 和 @RequestParam

1、@PathVariable注解为:路径变量。其获取值的目标,为url路径地址值中的一部分,RequestMapping 上说明了@RequestMapping(value=“/demo/{id}”),我就是想获取你URL地址 /emp/ 的后面的那个 {id}。本注解经常用于restful风格的url中。@PathVariable的value可绑定路径变量传入的值到方法参数上,以解决前端路径变量与后台方法参数名不一致的问题。

2、@RequestParam注解为:请求参数。其获取值的目标,为“?”后的参数的值。其内有4个参数:String name、String value、boolean required、String defaultValue。前两个参数一样,指向请求参数的名称,在前端数据名称与后台数据名称不一致时,可使用该属性建立关系,即:可绑定url的参数传来的值到方法参数上。boolean required为该参数是否是必须要传入的,默认为true,不传入就会404。String defaultValue表示参数的默认值,在分页中经常使用。

综上,举例如下:
地址1:http://localhost:8080/test/demo/2
地址2:http://localhost:8080/test/demo?size=1
地址1就是路径参数,由@PathVariable获取;地址2就是请求参数,由@RequestParam获取。

(三)@Autowired和@Resource

1、@Autowired:
spring提供的一个注解。
默认根据类型实现Bean的依赖注入。
其上有一个required属性,默认值为true,表示强制要求Bean注入,在应用启动时如果IOC容器不存在对应属性的Bean则会直接报错。如果改为false则不会在启动项目时自动注入。
如果在spring的IOC容器中,存在多个相同类型的Bean实例,由于@Autowired是根据Bean的类型进行注入,所以会直接报错:spring只能注入单实例Bean,但在IOC容器中发现多个实例导致注入失败。
这时可以采用@Primary注解,当容器内存在多个相同类型的Bean,被@Primary注解的Bean会优先被注入。
也可以采用@Qualifier注解,该注解会对相同类型的多个Bean进行筛选,利用Bean的名字找到唯一Bean。

2、@Resource:
jdk提供的一个注解,Spring在实现上对其提供了支持。
其上可以设置name属性或者type属性,确定是按照Bean的名字进行依赖注入,还是Bean的类型进行依赖注入。默认情况,先根据Bean的名字进行匹配,然后在根据类型进行匹配,如果都不能匹配成功则会报错。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值