spring框架
spring有两大核心,IOC和AOP,IOC控制反转,AOP面向切面编程
控制反转:就是把一些高频使用的类交给spring管理,由spring创建,不用手动去创建,在项目启动的时候,我们把一些声明的bean和在xml中定义的bean,这些bean会在spring中创建对象,我们会通过DI(依赖注入)的方式,注入到我们需要使用的地方,注入的方式有多种,比如:注解注入,构造器注入,set注入,最常用的是注解注入
面向切面编程:主要有2个关注点,切点和切面,切点就是看controller,service,dao具体配置在哪个地方,比如说我们要在第30行记录日志,那么30行就是切点,切面就是我们所写的业务逻辑,切点对应的逻辑代码中找到我要执行的java代码,这段代码就是切面,就是记录日志,需要具体的代码实现;就拿河边钓鱼来说,我们就需要考虑两个问题,在哪下网,下多大的网,在上游下还是下游下,人多的话就抓不到鱼了,抓大鱼的话,就用大网,抓小鱼的话,就用小网,我们下网的地就相当于切点,网就相当于切面,AOP常用来处理事务和记录日志,过滤器和拦截器中也用到了AOP
AOP实现原理:他的底层是通过动态代理实现的面向切面编程,主要用在管理事务这一块,我们在配置文件中配置切入点,比如以insert/save/update等开头的方法,我们开启事务,配置一个以开头的REQUIRED事务特性,还可以拿用在日志管理
常用注解:
- @Component
- @controller
- @service
- @Repository
- @Transactional
- @value
springBoot框架
springboot是用来简化spring开发,约定大于配置,去繁从简
优点:
- 配置简单
- 快速运行
- 自动装配
- 无代码生成和xml配置
- 提供应用监控
- 易上手
- 提高开发效率
常用注解:
- @SpringBootApplication:核心注解
- @EnableAutoConfiguration:自动配置
- @Configuration:定义配置
- @ComponentScan:组件扫描
- @ResponseBody
- @RestController
- @AutoWired
- @Qualifier:多个同一类型的bean,来区分
- @RequestParam
- @RequestMapping
- @PathVariable:获取参数
springCloud框架
spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。
springboot,springcloud的联系与区别
- springboot用于单个微服务开发
- springcloud是关注全局的微服务框架,将springboot的单个微服务进行整合和管理
联系:springboot可以离开springcloud独立开发,springcloud离不了springboot,属于依赖关系
springcloud和dubbo的区别:
- 服务调用方式:springcloud是rest API,dubbo是RPC
- 注册中心:dubbo是zookeeper,springcloud可以是eureka,也可以是zookeeper
- 服务网关:dubbo本身没有,需要与第三方整合,springcloud自带
核心组件:
- 注册中心:Eureka
- 熔断器:Hystix
- 服务调用:fegin
- 服务网关:Zuul
Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。
使用了一个RouteLocatorBuilder的bean去创建路由,除了创建路由RouteLocatorBuilder可以让你添加各种predicates和filters,predicates断言的意思,顾名思义就是根据具体的请求的规则,由具体的route去处理,filters是各种过滤器,用来对请求做各种判断和修改。
- 负载均衡:Ribbon
- 配置中心:config
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。
使用:
(1)添加pom依赖
(2)配置文件添加相关配置
(3)启动类添加注解@EnableConfigServer
常用注解:
- @EnableEurekaServer:开启eureka服务
-
@EnableEurekaClient:发布一个服务
-
@EnableDiscoveryClient:也表示发布一个服务(它俩的区别是
@
EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient
可以是其他注册中心) -
@EnableDiscoveryClient向注册中心上注册服务号
-
@LoadBalanced:开启ribbon负载均衡器
-
@EnableFeignClients:开启feign权限 @FeignClient(name = "app-buba-member")
-
@EnableHystrix开启Hystrix@HystrixCommand(fallbackMethod = "orderToUserInfoFallback")
-
@EnableConfigServer开启config-server @RefreshScope刷新注解
-
@EnableZuulProxy:开启注册网关
Dubbo框架
1.dubbo是一个分布式服务框架,dubbo的核心就是在项目启动的时候,把接口以服务的形式发布,服务的提供者在注册中心注册服务,服务的消费者去注册中心订阅,注册中心会把服务的路径和地址返回给消费者,消费者拿真实路径去注册中心找
2.dubbo的三种连接方式:有注册中心,无注册中心,广播
3.发布服务:<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService"/>
4.引用服务:<dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />
springMVC框架
springMVC是一个web层框架,当浏览器发送请求到dispatcherServlet,dispatcherServlet找到对应的handler,handler处理完成后,把数据和页面返回给dispatcherServlet,dispatcherServlet找到对应的viewResolver,viewReslover把数据渲染到页面上,展示给用户看
Struts2框架
struts2是一个web层框架,他的入口是 一个过滤器,他使用值栈存储数据,通过OGML来存取数据,如果返回一个对象还要配置对象的set,get方法,比较麻烦
(springMVC和Struts2的区别)springMVC的入口是一个Servlet,即前端控制器,Struts2的入口是一个过滤器;Struts2使用值栈来存储数据,通过OGNL来存取数据,springMVC通过参数解析器吧request对象进行解析得到参数,然后将响应数据和页面封装成对象,然后又将模型数据通过request对象返回到页面;springMVC有复合类型,可以一次性返回2个对象:Model和view
Mybatis框架
mybatis是一个ORM框架,对JDBC进行了较为完整的封装,对sql语句进行统一存取,我们只需要关注sql语句就行,通过mybatis提供的映射方法,自由灵活的生成sql语句
mybatis中#{}和${}的区别:#是一个占位符,具体使用:#{id},还可以来防止sql注入;$是原样输出的标志,具体使用:${name}
Hibernate框架
hibernate是一个ORM框架,对JDBC进行了较为完整的封装,他是一个开放源代码的对象映射框架,将pojo与数据库表建立关系
(mybatis和hibernate的区别)他们都是比较常用的ORM框架,对JDBC进行了较为完整的封装,区别在于:①.难易程度:mybatis比较简单,hibernate比较难,配置表与表的关联关系比较复杂②.开发工作量:mybatis的工作量多于hibernate,因为hibernate是对对象进行操作的,相对于来说,他的工作量比较小③.数据移植性:mybatis的sql都是自己手写的,移植性较差,hibernate与数据库的关联关系都在xml中配置,他使用的是hql语句,对具体数据库不是很关心,只需要配置对应的方言就行