【前言】前端
前些日子,我们一块儿学习过Java里面的注解。今天呢,就学习一下Springboot注解,从框架的组成原理上一点点的熟悉这个框架。java
【Spring】程序员
提到SpringBoot那你就得先了解Spring是什么?由于SpringBoot是一个简化Spring开发的框架。spring
A、Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架;数据库
控制反转——Spring经过一种称做控制反转(IoC)的技术促进了松耦合编程
面向切面——Spring提供了面向切面编程的丰富支持架构
B、Spring的Web模块;mvc
Web上下文模块创建于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。例如:实现文件上传的multipart请求,它也提供了Spring和其它Web框架的集成,好比Struts、WebWork。app
C、Spring的MVC框架;框架
Spring为构建Web应用提供了一个功能全面的MVC框架。虽然Spring能够很容易地与其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC对控制逻辑和业务对象提供了彻底的分离。
它也容许你声明性地将请求参数绑定到你的业务对象中,此外,Spring的MVC框架还能够利用Spring的任何其它服务,例如国际化信息与验证。
********
【Springmvc架构原理解析】
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler能够根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括 Model和view
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染
视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
组件:
①、前端控制器DispatcherServlet(不须要程序员开发)做用接收请求,响应结果,至关于转发器,中央处理器。有了DispatcherServlet减小了其它组件之间的耦合度。
②、处理器映射器HandlerMapping(不须要程序员开发)做用:根据请求的url查找Handler
三、处理器适配器HandlerAdapter做用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
③、处理器Handler(须要程序员开发)注意:编写Handler时按照HandlerAdapter的要求去作,这样适配器才能够去正确执行Handler
④、视图解析器View resolver(不须要程序员开发)做用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
⑤、视图View(须要程序员开发jsp)View是一个接口,实现类支持不一样的View类型(jsp、freemarker、pdf…)
*******
【SpringMVC经常使用注解】
@Controller
负责注册一个bean 到spring 上下文中
@RequestMapping
注解为控制器指定能够处理哪些 URL 请求
@RequestBody
该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,而后把相应的数据绑定到要返回的对象上 ,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上
@ResponseBody
该注解用于将Controller的方法返回的对象,经过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区
@ModelAttribute
在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法
在方法的入参前使用 @ModelAttribute 注解:能够从隐含对象中获取隐含的模型数据中获取对象,再将请求参数 –绑定到对象中,再传入入参将方法入参对象添加到模型中
@RequestParam
在处理方法入参处使用 @RequestParam 能够把请求参 数传递给请求方法
@PathVariable
绑定 URL 占位符到入参
@ExceptionHandler
注解到方法上,出现异常时会执行该方法
@ControllerAdvice
使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法能够处理全部Controller发生的异常
【SpringMVC与Struts2区别比较】
A、spring mvc 和 struts2的加载机制不一样:spring mvc的入口是servlet,而struts2是filter(servlet和filter区别见本文最后)
B、Struts2框架是类级别的拦截
C、SpringMVC是方法级别的拦截
【JPA注解】
@Entity:代表这是一个实体类。
@MappedSuperClass:用在肯定是父类的entity上。父类的属性子类能够继承。
@NoRepositoryBean:通常用做父类的repository,有这个注解,spring不会去实例化该repository。
@Column:若是字段名与列名相同,则能够省略。
@Id:表示该属性为主键。
@JoinColumn(name=”loginId”):一对一:本表中指向另外一个表的外键。一对多:另外一个表指向本表的外键。
@OneToOne、@OneToMany、@ManyToOne:对应hibernate配置文件中的一对一,一对多,多对一。
【全局异常注解】
@ControllerAdvice:包含@Component。能够被扫描到。统一处理异常。
@ExceptionHandler(Exception.class):用在方法上面表示遇到这个异常就执行如下方法。
【项目中具体配置解析和使用环境注解】
@MappedSuperclass:
1.@MappedSuperclass 注解使用在父类上面,是用来标识父类的
2.@MappedSuperclass 标识的类表示其不能映射到数据库表,由于其不是一个完整的实体类,可是它所拥有的属性可以映射在其子类对用的数据库表中
3.@MappedSuperclass 标识的类不能再有@Entity或@Table注解
@Column:
1.当实体的属性与其映射的数据库表的列不一样名时须要使用@Column标注说明,该属性一般置于实体的属性声明语句以前,还可与 @Id 标注一块儿使用。
2.@Column 标注的经常使用属性是name,用于设置映射数据库表的列名。此外,该标注还包含其它多个属性,如:unique、nullable、length、precision等。
【执行持久化方法,按发生时间执行的回调函数】
@javax.persistence.PostLoad:加载后。
@javax.persistence.PrePersist:持久化前。
@javax.persistence.PostPersist:持久化后。
@javax.persistence.PreUpdate:更新前。
@javax.persistence.PostUpdate:更新后。
@javax.persistence.PreRemove:删除前。
@javax.persistence.PostRemove:删除后。
【数据库注解】
1)增
@PrePersist和@PostPersist事件在实体对象插入到数据库的过程当中发生:
@PrePersist事件在调用persist()方法后马上发生,此时的数据尚未真正插入进数据库。
@PostPersist事件在数据已经插入进数据库后发生。
2)删
@PreRemove和@PostRemove事件的触发由删除实体引发:
@PreRemove事件在实体从数据库删除以前触发,即在调用remove()方法删除时发生,此时的数据尚未真正从数据库中删除。
@PostRemove事件在实体从数据库中删除后触发。
3)改
@PreUpdate和@PostUpdate事件的触发由更新实体引发:
@PreUpdate事件在实体的状态同步到数据库以前触发,此时的数据尚未真正更新到数据库。
@PostUpdate事件在实体的状态同步到数据库以后触发,同步在事务提交时发生。
4)查
@PostLoad事件在下列状况下触发:
执行EntityManager.find()或getreference()方法载入一个实体后。
执行JPQL查询后。
EntityManager.refresh()方法被调用后。