天天看点

【spring相关面试题摘录】

    • 什么是bean的自动装配,有哪些方式?
    • Spring Boot、Spring MVC 和 Spring 有什么区别
      • 如何重新加载Spring Boot 上的更改,而无需重新启动服务器?
      • Spring Boot 中的监视器是什么?
    • 谈谈你对AOP的理解

什么是bean的自动装配,有哪些方式?

开启自动装配,只需要在xml配置文件中定义“autowire”属性。

autowire属性有五种装配的方式:

no – 缺省情况下,自动配置是通过“ref”属性手动设定 。

byName-根据bean的属性名称进行自动装配。

Cutomer的属性名称是person,Spring会将bean id为person的bean通过setter方法进行自动装
配。
<bean id="cutomer" class="com.xxx.xxx.Cutomer" autowire="byName"/>
<bean id="person" class="com.xxx.xxx.Person"/>
           

byType-根据bean的类型进行自动装配。

Cutomer的属性person的类型为Person,Spirng会将Person类型通过setter方法进行自动装配。
<bean id="cutomer" class="com.xxx.xxx.Cutomer" autowire="byType"/>
<bean id="person" class="com.xxx.xxx.Person"/>
           

constructor-类似byType,不过是应用于构造器的参数。如果一个bean与构造器参数的类型形同,则进行自动装配,否则导致异常。

autodetect-如果有默认的构造器,则通过constructor方式进行自动装配,否则使用byType方式进行自动装配。

@Autowired自动装配bean,可以在字段、setter方法、构造函数上使用。

手动装配:以value或ref的方式明确指定属性值都是手动装配。

需要通过‘ref’属性来连接bean。

Cutomer的属性名称是person,Spring会将bean id为person的bean通过setter方法进行自动装配。

<bean id="cutomer" class="com.xxx.xxx.Cutomer" autowire="byName"/>
<bean id="person" class="com.xxx.xxx.Person"/>
           

@Autowired自动装配bean,可以在字段、setter方法、构造函数上使用。

Spring Boot、Spring MVC 和 Spring 有什么区别

Spring是一个轻量级的使用控制反转(IoC)和面向切面(AOP)的J2EE容器框架,用来管理Bean

–从大小与开销两方面而言Spring都是轻量级的。

–通过控制反转(IoC)的技术达到松耦合的目的

–提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发

–包含并管理应用对象(Bean)的配置和生命周期,这个意义上是一个容器。

–将简单的组件配置、组合成为复杂的应用,这个意义上是一个框架

spring可以很方便的整合各种框架,提供AOP机制弥补OOP的代码重复问题、更方便将不同类不同方法中的共同处理抽取成切面、自动注入给方法执行,比如日志、异常等

springmvc是spring对web框架的一个解决方案,提供了一个总的前端控制器Servlet,用来接收请求,然后定义了一套路由策略(url到handle的映射)及适配执行handle,将handle结果使用视图解析技术生成视图展现给前端

springboot是spring提供的一个快速开发工具包,让程序员能更方便、更快速的开发spring+springmvc应用,简化了配置(约定了默认配置),整合了一系列的解决方案(starter机制)、redis、mongodb、es,可以开箱即用

Spring Boot 已经建立在现有spring 框架之上。使用spring 启动,我们避免了之前我们必须做的所有样板代码和配置。因

此, Spring Boot 可以帮助我们以最少的工作量, 更加健壮地使用现有的Spring功能。

Spring Boot 的优点有:

1、减少开发,测试时间和努力。

2、使用JavaConfig 有助于避免使用XML。

3、避免大量的Maven 导入和各种版本冲突。

4、提供意见发展方法。

5、通过提供默认值快速开始开发。

6、没有单独的Web 服务器需要。这意味着你不再需要启动Tomcat,Glassfish

或其他任何东西。

7、需要更少的配置因为没有web.xml 文件。只需添加用@ Configuration 注释的类,然后添加用@Bean 注释的方法,Spring 将自动加载对象并像以前一样对其进行管理。您甚至可以将@Autowired 添加到bean 方法中,以使Spring 自动装

入需要的依赖关系中。

8、基于环境的配置使用这些属性,您可以将您正在使用的环境传递到应用程序:

-Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,

Spring 将在(application{environment} .properties)中加载后续的应用程序属性文件。

如何重新加载Spring Boot 上的更改,而无需重新启动服务器?

这可以使用DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat 将重新启动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java 开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools 模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2 数据库控制台以更好地测试应用程序

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
           

Spring Boot 中的监视器是什么?

Spring boot actuator 是spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向

相关人员触发警报消息。监视器模块公开了一组可直接作为HTTP URL 访问的REST 端点来检查状态

谈谈你对AOP的理解

系统是由许多不同的组件所组成的,每一个组件各负责一块特定功能。除了实现自身核心功能之外,这些组件还经常承担着额外的职责。例如日志、事务管理和安全这样的核心服务经常融入到自身具有核心业务逻辑的组件中去。这些系统服务经常被称为横切关注点,因为它们会跨越系统的多个组件。

当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。

在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

AOP:将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。AOP可以对某个对象或某些对象的功能进行增强,比如对象中的方法进行增强,可以在执行某个方法之前额外的做一些事情,在某个方法执行之后额外的做一些事情

1.应用场景 AOP适合的场景很多,包括:

·日志记录:不需要在逻辑代码中混杂日志代码,在项目后期织入日志功能。可以织入的日志包括系统登录日志、服务及方法调用日志等。

·安全控制:对系统的访问进行登录验证,对请求进行权限验证。

·参数检验:对请求参数进行统一转换或验证。 ·事务处理:统一处理数据库事务的提交和回滚,比如在方法执行完成后自动提交事务,出现异常时自动回滚。

·统一异常处理:不需要在每个方法中使用try catch捕捉异常,使用AOP集中处理。

·缓存:使用AOP实现缓存存取和清除。

·统一发信、通知,对某些方法执行或者异常拦截发送通知。 横向共用功能通过AOP实现后, 业务逻辑代码变得干净、整洁。

2. AOP的基本术语解释如下:

·Aspect:切面,由切点和增强组成,如在Java代码中对应一个切面类。

·JointPoint:连接点。程序执行的某个位置,如函数调用、函数执行、构造函数调用、获取或设置变量、类初始化等。 ·Pointcut:切入点,也就是特定的连接点。一个程序有多个连接点,但并不是所有连接点都是需要关心的,找到合适的连接点进行切入。切入点就是选取的合适连接点的描述。一句话,Pointcut用来限定和描述JointPoint。

·Advice:增强。织入到目标连接点的代码,也就是额外功能的代码。

·Weaving:织入。将增强添加到目标连接点的过程。

·Before(前置)、After(后置)和Around(环绕):织入方位可前、 可后也可以是两者的合集。 代理(Proxy)是实现AOP的主要技术,在代理类中包含了原始类和增强代码的功能。

【关键词:增强,代理】