AOP
* 前置通知:@Before("切入点表达式")
* 后置通知:@AfterReturning("切入点表达式")
* 异常通知:@AfterThrowing("切入点表达式")
* 最终通知:@After("切入点表达式")
* 环绕通知:@Around("切入点表达式")什么事AOP
面向切面编程,通过预编译方式或者运行期动态代理实现功能的统一维护的技术
在不修改源码的情况下进行功能性增强,通过动态代理实现,减少重复代码,提高开发效率,方便维护
给功能增加日志输出,事务管理
IOC
Ioc:容器的概念,控制反转,依赖注入
ioc容器实际上就是一个map,里面存储的各种对象,在项目启动时会读取配置文件里的bean节点,根据全限定类名使用反射创建对象到map里,这个时候map中就有对象了在通过Autowired,Resource等注注解注入对象
控制反转:在没有引入ioc容器钱,对象a依赖于对象b,那么对象a在初始化或运行到某一节点的时候,自己必须主动创建b或者使用已经创建好的b,无论那种创建方式,控制权都在自己手上,
引入ioc容器后,当对象a运行到需要对象b的时候ioc容器会主动创建一盒对象B注入到A需要的地方
依赖注入:获取依赖对象的过程中被反转了,控制反转后获取依赖对象的过程由自身管理变为了ioc容器主动注入,依赖注入是实现ioc的方法,就是由ioc容器在运行期间,动态的将某种依赖关系注入到对象之中
springMVC的执行流程
用户发送请求到前端控制器(DispatcherServlet)
前端控制器(DispatcherServlet)收到请求调用处理器映射器(HandlerMapping),去查找处理器(Handler)
处理器映射器(HandlerMapping)找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。
DispatcherServlet 调用 HandlerAdapter 处理器适配器
处理器适配器(HandlerAdapter)去执行 Handler(Controller,也叫后端控制器)。
Controller 将得到的参数进行处理并返回结果给 HandlerAdapter
HandlerAdapter 将得到的结果返回给 dispatcherServlet
DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器
ViewReslover 将得到的参数从逻辑视图转换为物理视图并返回给 dispatcherServlet
dispatcherServlet 调用物理视图进行渲染并返回
dispatcherServlet 将渲染后的结果返回
springboot的优点
SpringBoot 对上述 Spring 的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。版本锁定:解决是 maven 依赖版本容易冲突的问题,集合了常用的并且测试过的所有版本起步依赖 :解决了完成某一个功能要整合的 jar 包过多的问题,集合了常用的 jar 包自动配置:解决了整合框架或者技术的配置文件过多,集合了所有的约定的默认配置内置 Tomcat:通过内置的 tomcat,无需再用其他外置的 Tomcat 就直接可以运行 javaEE 程序总之:人们把 Spring Boot 称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的spring 项目,并且尽可能的减少一切 xml 配置,做到开箱即用,迅速上手,让我们关注与业务而非配置。
springboot的自动装配原理
在项目启动时,创建ioc容器,run方法会把引导类直接注册bean对象到ioc容器,加载引导类上的注解
springboot的启动类上的注解@SpringbootApplication是一个组合注解,注解中的@EnableAutoConfiguration用来自动装配的,他也是一个组合注解其中有一个注解@Import(AutoConfigurationImportSelector.class)AutoConfigurationImportSeletor.class这个类中最终会从META-INF/spring.factories加载配置文件,这个名单中的类名点进去为配置类,spring.factories文件中的全限定类名的类都会注册到ioc容器
springcloud的组件
服务注册与发现 Eureka
负载均衡 Ribbon
服务容错,断路器,降级处理 Hystrix
服务网关 Zuul
分布式配置 Config
声明式服务调用Feign
网关 Gateway
启动Eureka
1.在注册中心模块的启动类上添加注解 @EnableEurekaServer 开启注册中心服务
2.在启动类上通过添加@EnableDiscoveryClient来开启客户端功能
启动Ribbon
因为Eureka已经继承了Ribbon可直接使用
@Bean
@LoadBalanced //Ribbon注解
public RestTemplate restTemplate(){
return new RestTemplate();
}
启动Hystrix
启动类上加注解 @EnableHystrix
方法上添加注解 @HystrixCommand(fallbackMethod="方法名")
feign
启动类上加@EnableFeignClients
springCloud和Springboot的关系
spirngboot专注于单个个体微服务
Springcloud是关注于全局的微服务协调治理,他将Springboot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供配置管理,服务发现,断路器,路由,微代理,等继承服务
spirngCloud依赖于springcloud