Spring注解

Spring 注解

在Springboot中使用注解的优势

  1. 采用纯java代码,不需要配置xml文件
  2. 减少复杂的配置文件同时也可以享受springIoc提供的功能

SpringBootApplication注解

在Springboot中核心的注解就是@SpringBootApplicat以及run方法。

首先我们看下Springboot的启动类
在这里插入图片描述
进入SrpingBootApplication注解。
在这里插入图片描述
在这我们发现@SpringBootApplicat注解是由**@SpringBootConfiguration**,@EnableAutoConfiguration,@CompoeneScan三个注解共同组成的,Springboot官方也对这三个注解做了想起分析。官方文档

首先来看下SpringBootConfiguration注解。

在这里插入图片描述
在这我们发现在这除掉java的元注解,就多了一个@Configuration注解,对于该注解的作用
1. 让我们能够注册一些额外的Bean,并且导入一些额外的配置。
2. 注解在类上,把该类作为一个配置了,不需要额外的进行xml的配置。
所有对于SpringBootConfiguration相当于是一个Configuration注解

注解@EnableAutoConfiguration

在这里插入图片描述
进入该注解,发现除了元注解还多了@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)注解。

首先我们来看下它们的作用

@AutoConfigurationPackage,该注解的作用让包中的类及子包中的类能够被自动扫描到SpringBoot的容器中。
@Import(AutoConfigurationImportSelector.class),该注解就是自动装配的核心注解。那么再来看下该注解是如何自动完成装配的并配置了那些东东。
在这里插入图片描述
发现该类实现了多个接口,进入会发现,该类实现了一个ImportSelector接口,并重写了该接口中的selectImport方法。
在这里插入图片描述
这个类会帮我们扫描那些类自动加入到程序中。我们找到其中的getCandidateConfiguration方法,它的作用就是获取系统已经加载好的一些类,我们进入该方法,看看到底是那些类
在这里插入图片描述
在这发现,这个类回去寻找一个目录为META-INF/spring.factories文件,也就是说他帮你加载让你去使用也就是在这个META-INF/spring.factories目录装配的。在这里插入图片描述
进入spring.factories
在这里插入图片描述
获取到EnableAutoConfigcurtion的值并加入到容器中,上面的每一个以AutoConfiguration结尾的类,都是容器中的一个组件,都加入到容器中;用他们来做自动配置.
@EnableAutoConfiguration主要作用就是让你自动去配置,但并不是所有都是创建好的,是根据你程序去进行决定。
我在来看最后这个注解:@ComponentScan
这个注解大家应该都不陌生,扫描包,放入spring容器,当然该注解可以跟你自己定义可以去扫描那些包下面的类。

其他注解

@RequestMapper:提供路由信息,负责URL到Controller中具体函数的映射。
@ResponseBody:表示该方法的返回结果直接写道HTTP response body中,一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@ResponseBody后返回结果不会被解析为跳转路径,而是直接写道HTTP response body中,返回的时json数据
@RequestBody:则是将HTTP中正文插入到方法中,使用合适的HttpMessageConverter将请求写入到合适的对象中

@RequestMapping(value = "comm/P00001")
@ResponseBody 
public SysUser getSysUser(@RequestBody SysUser sysUser){
}

@pathVariable:该注解时获取请求路径中的动态参数,列如

@RequestMapping(value = "comm/P00001/{id}/{name}")
@ResponseBody
public SysUser porfile(@PathVariable int id, @PathVariable String name) {
}

@Autowired:是对bena的注入时使用的,它是按照byType来装配对象的,默认情况下它要求依赖的对象必须存在,如果允许为null,可以设置它的required属性值为false,如果想要使用byName来进行装配,则可以和@Qualifier注解一起使用。

@Resource:也是对bean的注入时使用,但时该注解时由J2EE提供的,
@Resource注解由两个属性,name,type。该注解默认时通过byName进行注入的,如果需要通过ByType来实现注入,可以使用type属性来实现ByType自动注入,使用name属性则通过ByName来实现注入。
@Autowired其实相当于@Resource注解,只不过@Autowired是通过ByType来实现自动注入的。

@Controller,@Component,@Service,@Repository这些注解的类,并注册Bean,可以自动收集所有的Spring组件。
相同点:@Controller、@Service、@Repository注解都带有@Component注解,所有可以说四个注解可以看成是@Component级别的注解,在Spring框架自动扫描的注解也是检查是否由@Component注解,把普通的pojo实例化到spring的容器中。
@Controlle,@Repositroy,@Service注解都是作用在接口的实现类上面。
不同点:
@Repository:这个注解标识的类是用来直接访问数据库的,dao层使用@Repository注解。如Repository(value=“userDao”)注解就是告诉Spring,让Spring创建一个名叫“userDao”的UserDaoImpl事例,当Service需要使用到这个userDao时,Spring就会把创建好的userDao注入到Service中。
@Service:应用的业务层通常在service层,因为一般使用@Service注解来标记这个类是业务逻辑层,如@Service(value=“userService”)注解告诉Spring,当需要创建“UserServiceImpl”的实例时,bean的名字必须要做“userService”,当controller需要使用到这个实例时,就可以由Spring将已经创建好的“userService”,注入给controller
@Controller:该注解作为Spring的控制器,可以看做为时暴露给前端的入口
@Controller:使用来修饰web控制层bean,如spring mvc中的控制层,在Spring mvc的web控制层通常会使用@Controller或@RestController注解。使用@RestController注解相当于使用@ResponseBody和@Controller注解。(@RestController = @ResponseBody + @Controller)
两者的之间的区别:
@Controller修饰的方法会经过视图解析器来定位视图,它返回的是逻辑视图,即jsp页面或html页面。而@RestController修饰的方法会直接将数据模型渲染便结束,将结果写到HTTP response body中,它不会经过视图解释器进行解析的。
如果想要做页面跳转,则可以使用@Controller,不要使用@RestController

@Configuration:被该注解标记的类,相当于传统的xml配置文件,如果需要引入第三方的xml文件,则建议依然通过@Configuration类作为项目的配置主类,可以使用@ImportResource注解来加载xml文件。
@ImportResuorce:该注解的主要主要时用于导入Spring的配置文件,让配置文件生效。
在Springboot中是没有Spring的配置文件,我们如果自己编写一个配置文件,对于Springboot来说就不能被识别了,如果想要让Springboot识别,在可以使用@ImportResuorce(values=“classPath:XXX”)。
注意:该注解是用于主入口函数的类上,而不能用在测试类上。

全局异常处理注解

@ControllerAdvice、@RestControllerAdvice:统一处理异常
两者的区别:就是@Controller与@RestController的区别
@RestControllerAdvice:返回结果是json数据。
@ControllerAdvice:如果需要返回json格式数据,则需要在方法上加上@ResponedBody
@ExceptionHandler(Exception.class):用在方法上,当遇到Exception异常就会执行这个方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值