Spring面试总结

in with 0 comment

说一下你对 Spring 的理解?

关于 Spring 的话,我们平时做项目一直都在用,不管是使用 ssh 还是使用 ssm,都可以整合。Spring 里面主要的就三点,也就是核心思想,IOC,DI,AOP。其实 spring 这个框架也用到了 Java 里的反射机制.DI 就是依赖注入,把我们需要的类啊,接口啥的注入到 spring 中去。IOC 控制反转,像我们之前开发,如果想创建一个对象,就 new 一个,如果想这个对象中定义其他的变量或者对象,就在对象内部创建一个成员变量。但是现在的话,如果想用这个类的对象,咱们可以在 spring 的配置文件中配置一个 bean,指定对应的全路径名称。spring 通过配置文件用反射的方式,就可以直接帮我们获取到这个类的对象。还有 AOP,就是面向切面编程,它的原理的话,我看过它的底层代码,它实际上就是实现了 JDK 的动态代{过}{滤}理,以前的话用这个做过事务的控制,现在的话我们都用注解来控制事务。AOP 执行过程是一个纵向的过程,把每个方法当作一个点.基于这些点可以进行增强处理.形成了横向的切面,包含了原有方法和增强方法.不改变原有代码结构,还添加了额外的功能. 整体来说的话,Spring 在使用的时候非常方便,在配置文件中配置要依赖的对象,或者在配置文件中将对象及属性进行注入,当然现在基本都用注解的方式,更方便。除了这些,我们之前的项目也用过 spring 的其他产品,像 spring boot(简化新 Spring应用的初始搭建以及开发过程,用我的话来理解,就是 spring boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 maven 整合了所有的 jar 包,spring boot 整合了所有的框架),spring cloud 微服务框架。比 spring 更简单,快速,方便。

你了解的 AOP 的使用场景有哪些?

事务管理,日志打印,还有就是在老项目中也有可能用它来做权限管理. 1.2.Spring 常用的注解 我们开发的时候常用的注解也就@service 业务逻辑,@Transactionnal 事务的注解,有时候需 要 注 入 DAO 的 话 还 会 用 到 @Repository 还 有 就 是 springMVC 里 的 注 解 啦 , 比 如 说@Controller 对应表现层的注解在 spring 未来的版本中,@RestController 这个控制器返回的都是 json 格式,还有@RequestMapping 进入的 URL,@responsebody 也是定义该方法返回JSON 格式,还有就是@RequestParam 获取参数,@RequestBody 获取前台的数据是 JSON 格式的数据,@PathVariable 从 URL 请求路径中获取数据,大概常用的也就这些. 1.3.简单说一下 SpringMVC 与 Spring 是如何整合的? 简单的说 springMVC 在 ssm 中整合 就是 在 web.xml 里边配置 springMVC 的核心控制器:DispatcherServlet; 它就是对指定后缀进行拦截;然后在 springMVC.xml 里边配置扫描器,可以扫描到带@controller 注解的这些类,现在用 springMVC 都是基与注解式开发, 像@service,@Repository @Requestmapping,@responsebody 这些注解标签 等等 都是开发时用的,每个注解标签都有自己的作用;它还配置一个视图解析器,主要就是对处理之后的跳转进行统一配置 ,大致就是这些

Spring 中@Autowired 和@Resource 的区别?

@Autowired 默认的是按照类型进行注入, 如果没有类型会按照名称(红色字体)进行注入. 如果想直接按照名称注入需要加入@Qualifier("gatheringDao")

@Qualifier("gatheringDao")
private GatheringDao gatheringDao;

@Resource 默认的会按照名称注入,名称找不着会按照类型来找,如果这里写了名称,就直接按照名称找了不会按类型找

@Resource
private GatheringDao gatheringDao;

介绍一下 SpringBoot 吧

我个人觉得SpringBoot比以前的SpringMVC更好用,因为他的配置文件少了。原来SpringMVC的SSM整合的配置文件特别多,用了SpringBoot之后配置文件特别少了。就需要一个yml文件几乎全部搞定,我们用SpringBoot时结合的MyBatis去做得,SpringBoot基本上是一些YML文件,properties文件,MyBatis全程用的注解方式开发。SpringBoot和SpringMVC用法上大同小异,无非就是少了一些配置文件。启动SpringBoot服务器的时候是他自带的Tomca和Jetty服务器,可以通过main方法启动。启动的注解是@SpringBootApplication,我们也用过Spring的全家桶,SpringBoot+JPA+SpringCloud组件,

SpringCloud 的常用组件介绍一下?

Eureka 组件(服务发现)音标(juri:kə): 相当于我们使用的 dubbox 的时候 zookeeper注册中心. Feign 组件: 调用服务的时候用的组件 Hystrix(histriks)熔断器: 我们在调用服务的时候,有可能涉及到服务的连锁调用,比如说 A 服务调用 B 服务,B 服务里还调用了 C 服务, 使用 A 服务的时候,B 服务和 C 服务都得正常运行才可以使用,B 调用 C 没有调通的时候, B 直接给 A 返回内容, 不至于像以前报错. 服务网关 zull: 前后端进行调用的时候可以,可以走同一个 IP 地址,因为项目端口号太多, 配置这个以后就可以直接走一个端口号,他自动会给你分配具体调用的哪一个端口分布式配置 Spring Cloud Config:我们把多个项目的配置文件归置为一个,修改配置文件以后,不用再重新部署某一个项目啦. 消息总线:Spring Cloud Bus: 修改完配置文件以后不用重启项目

SpringBoot和SpringMVC与springCloud关系及运行原理?

1.springboot 是 springmvc 的升级版,其实就把 springmvc 里的配置文件,改为全注解的开发 2.SpringCloud 通过 Springboot 把其他的通信组件等等进行了封装,你如果使用SpringCloud 的,那就必须得使用 SpringBoot,使用 SpringBoot 的话不一定非得使用SpringCloud. 运行原理 1.Spring Boot 在启动时扫描项目所依赖的 JAR 包,寻找包含 spring.factories 文件的 JAR 2.根据 spring.factories 配置加载 AutoConfigure 类 3.根据@Conditional 注解的条件,进行自动配置并将 Bean 注入 Spring Context

单元测试的时候怎么启动 spring 容器的

这个可以通过读取配置文件的方式也行,用 applicationContext 读取 xml 配置文件,其实我更喜欢使用Spring 配合 junit 用注解的方式去启动

Spring 的三种注入方式?

我们项目中是配置扫描包,通过注解方式注入的,还有通过 seter 和构造方法的方式注入.