⏰⏰⏰Spring知识点

一、Spring

1.为什么要使用Spring

(1)spring 提供 ioc 技术,容器会帮你管理依赖的对象,从而不需要自己创建和管理依赖对象了,更轻松的实现了程序的解耦
(2)spring 提供了事务支持,使得事务操作变的更加方便。
(3)spring 提供了面向切片编程,这样可以更方便的处理某一类的问题。
(4)更方便的框架集成,spring 可以很方便的集成其他框架,比如 MyBatis 等。

2.什么是IOC(控制反转)

ioc:控制权转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责和维护。ioc的目的是创建对象并且组装对象之间的关系。
Spring 框架使用依赖注入(DI)实现 IoC。

3.什么是DI(依赖注入)

在依赖注入中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由 IoC 容器将它们装配在一起。

4.依赖注入的几种方法

(1)构造函数注入
(2)setter 注入
(3)接口注入
(4)注解注入

  • 一、 @Repository 用于对 DAO 实现类进行注解
  • 二、@Service 用于对 Service 实现类进行注解
  • 三、@Controller用于对 Controller 实现类进行注解 这三个注解与@Component 都可以创建对象,但这三个注解还有其他的含义
  • 四、@Service 创建业务层对象,业务层对象可以加入事务功能,@Controller 注解创建的对象可以作为处 理器接收用户的请求
    @Repository,@Service,@Controller 是对@Component 注解的细化,标注不同层的对象。即持久层对象,业务层对象,控制层对象。
  • 五、@Value需要在属性上使用注解@Value,该注解的 value 属性用于指定要注入的值。
  • 六、@Autowired需要在引用属性上使用注解@Autowired,该注解默认使用按类型自动装配 Bean 的方式。需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用于指定要匹配的 Bean 的 id 值。
  • @Resource 注解既可以按名称匹配Bean,也可以按类型匹配 Bean。默认是按名称注入。使用该注解,要求 JDK 必须是 6 及以上版本。@Resource 注解若不带任何参数,采用默认按名称的方式注入,按名称不能注入 bean,则会按照类型进行 Bean 的匹配注入。

5.spring 中有多少种 IOC 容器?

(1)BeanFactory - BeanFactory 就像一个包含 bean 集合的工厂类。它会在客户端要求时实例化 bean。
(2)ApplicationContext - ApplicationContext 接口扩展了 BeanFactory 接口。它在 BeanFactory 基础上提供了一些额外的功能。

6.spring 提供了哪些配置方式?

(1)基于 xml 配置
bean 所需的依赖项和服务在 XML 格式的配置文件中指定。这些配置文件通常包含许多 bean 定义和特定于应用程序的配置选项。它们通常以 bean 标签开头。
(2)基于注解配置
您可以通过在相关的类,方法或字段声明上使用注解,将 bean 配置为组件类本身,而不是使用 XML 来描述 bean 装配。默认情况下,Spring 容器中未打开注解装配。因此,您需要在使用它之前在 Spring 配置文件中启用它。
(3)基于 Java API 配置(配置类)
Spring 的 Java 配置是通过使用 @Bean 和 @Configuration 来实现。

7.spring 支持几种 bean 的作用域?

spring 支持 5 种作用域,如下:
(1)singleton:spring ioc 容器中只存在一个 bean 实例,bean 以单例模式存在,是系统默认值;
(2)prototype:每次从容器调用 bean 时都会创建一个新的示例,既每次 getBean()相当于执行 new Bean()操作;
Web 环境下的作用域:
(3)request:每次 http 请求都会创建一个 bean;
(4)session:同一个 http session 共享一个 bean 实例;
(5)global-session:用于 portlet 容器,因为每个 portlet 有单独的 session,globalsession 提供一个全局性的 http session。

8.spring 自动装配 bean 有哪些方式?

no:默认值,表示没有自动装配,应使用显式 bean 引用进行装配。
byName:它根据 bean 的名称注入对象依赖项。
byType:它根据类型注入对象依赖项。
构造函数:通过构造函数来注入依赖项,需要设置大量的参数。
autodetect:容器首先通过构造函数使用 autowire 装配,如果不能,则通过 byType 自动装配。

9.解释一下什么是 aop?

aop 是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。简单来说就是统一处理某一“切面”(类)的问题的编程思想,比如统一处理日志、异常等。

10.AOP 编程术语

(1) 切面(Aspect)
切面泛指交叉业务逻辑。上例中的事务处理、日志处理就可以理解为切面。常用的切面是通知(Advice)。实际就是对主业务逻辑的一种增强。
(2) 连接点(JoinPoint)
连接点指可以被切面织入的具体方法。通常业务接口中的方法均为连接点。
(3) 切入点(Pointcut)
切入点指声明的一个或多个连接点的集合。通过切入点指定一组方法。被标记为 final 的方法是不能作为连接点与切入点的。因为最终的是不能被修改的,不能被增强的。
(4) 目标对象(Target)
目标对象指将要被增强的对象。即包含主业务逻辑的类的对象。上例中的StudentServiceImpl 的对象若被增强,则该类称为目标类,该类对象称为目标对象。当然,不被增强,也就无所谓目标不目标了。
(5) 通知(Advice)
通知表示切面的执行时间,Advice 也叫增强。上例中的 MyInvocationHandler 就可以理解为是一种通知。换个角度来说,通知定义了增强代码切入到目标代码的时间点,是目标方法执行之前执行,还是之后执行等。通知类型不同,切入时间不同。切入点定义切入的位置,通知定义切入的时间。

11.什么是 Aspect?

aspect(切面) 由 pointcut 和 advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP 就是负责实施切面的框架, 它将切面所定义的横切逻辑编织到切面所指定的连接点中.

12.AOP 有哪些实现方式?

实现 AOP 的技术,主要分为两大类:

静态代理 - 指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;
1)编译时编织(特殊编译器实现)
2)类加载时编织(特殊的类加载器实现)。

动态代理 - 在运行时在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。
1)JDK 动态代理
2)CGLIB

扩展知识:

  • 动态代理详情
  • 静态代理是程序运行前,代理类的.class文件已经存在了。
  • 动态代理是,在程序运行时运用反射机制动态创建而成,无需手动编写代码

JDK和CGLib动态代理区别

  • 1、JDK动态代理,要求目标类实现接口(newProxyInstance方法参数要求),但是有时候目标类直接一个单独的对象,并没有实现任何的接口,这时就得使用CGLib动态代理
  • 2、JDK动态代理是JDK里自带的,CGLib动态代理需要引入第三方的jar包
  • 3、CGLib动态代理,它是在内存中构建一个子类对象,从而实现对目标对象功能的扩展
  • 4、CGLib动态代理,是基于继承来实现代理,所以无法对final类、private方法和static方法进行代理

AOP具体实现流程

springAOP的具体加载步骤:
   1、当spring容器启动的时候,加载了spring的配置文件
   2、为配置文件中所有的bean创建对象
   3、spring容器在创建对象的时候它会解析aop:config的配置 
       	    解析切入点表达式,用切入点表达式和纳入spring容器中的bean做匹配
            如果匹配成功,则会为该bean创建代理对象,代理对象的方法=目标方法+通知
            如果匹配不成功,则为该bean创建正常的对象
	其实就是你通过表达式告诉Spring哪些bean需要它帮你生成代理对象而不是生成原有的正常对象
      理解这一点相当重要!
   4、在客户端利用context.getBean获取对象时,如果该对象有代理对象则返回代理对象,如果没有代理对象,则返回目标对象。
说明:
1. 如果目标类实现了接口,spring容器会采用jdk的动态代理产生代理对象,产生的代理类和目标类实现了相同的接口;

2. 如果目标类没实现接口,spring容器会采用cglib的方式产生代理对象,产生的代理类是目标类的子类

13.AspectJ

在 Spring 中使用 AOP 开发时,一般使用 AspectJ 的实现方式。
AspectJ 中常用的通知有五种类型:
(1)前置通知
(2)后置通知
(3)环绕通知
(4)异常通知
(5)最终通知

14.Spring中涉及的设计模式:

详情

  • 简单工厂(非23种设计模式中的一种):Spring中的BeanFactory
  • 工厂方法:实现了FactoryBean接口的bean是一类叫做factory的bean
  • 单例模式:Spring中依赖注入的Bean实例默认是单例的。
  • 适配器模式:SpringMVC中的适配器HandlerAdatper。
  • 装饰器模式:Spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator。
  • 代理模式:AOP底层,就是动态代理模式的实现。
  • 观察者模式:listener的实现。具体实现:事件源、事件、事件监听器。
  • 策略模式:Spring框架的资源访问Resource接口。
  • 模版方法模式:是模板方法模式和回调模式的结合,父类定义了骨架(调用哪些方法及顺序),某些特定方法由子类实现。

二、SpringMVC

14.spring mvc 运行流程?

详情
(1)spring mvc 先将请求发送给 DispatcherServlet。
(2)DispatcherServlet 查询一个或多个 HandlerMapping处理器映射器,DispatcherServlet调用HandlerAdapter处理器适配器。调用具体的处理器 Controller。
(3)DispatcherServlet 再把请求提交到对应的 Controller。
(4)Controller 进行业务逻辑处理后,会返回一个ModelAndView。
(5)Dispathcher 查询一个或多个 ViewResolver 视图解析器,找到 ModelAndView 对象指定的视图对象。
(6)视图对象负责渲染返回给客户端。

15.spring mvc 有哪些组件?

(1)前置控制器 DispatcherServlet。
(2)映射控制器 HandlerMapping。
(3)处理器 Controller。
(4)模型和视图 ModelAndView。
(5)视图解析器 ViewResolver。

三、SpringBoot

16.为什么要用 spring boot?

(1)配置简单
(2)独立运行
(3)自动装配
(4)无代码生成和 xml 配置
(5)提供应用监控
(6)提升开发效率

17.spring boot 核心配置文件是什么?

(1)bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,且 boostrap 里面的属性不能被覆盖;
(2)application (. yml 或者 . properties):用于 spring boot 项目的自动化配置。

四、SpringCloud

18.spring cloud 的核心组件有哪些?

(1)Eureka:服务注册于发现。
(2)Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
(3)Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
(4)Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
(5)Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。

五、Mybatis

19.MyBatis 中 #{}和 ${}的区别是什么?

#{}是预编译处理,${}是字符替换。 在使用 #{}时,MyBatis 会将 SQL 中的 #{}替换成“?”,配合 PreparedStatement 的 set 方法赋值,这样可以有效的防止 SQL 注入,保证程序的运行安全。

六 Dubbo

流程

流程,注册中心挂了也能通信
在这里插入图片描述

注册中心有哪些

详情
Dubbo 2.6.x版本中主要包含四种注册中心: Zookerper、Redis、Simple、Multicast。
Dubbo 2.7.7最新版本中注册中心增加了:Sofa、Nacos、Eureka、etcd3、Consul。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zkFun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值