Spring面试题系列-5

简介: Spring面试题系列-5


Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

为什么要使用AOP?

使用AOP(面向切面编程)的原因可能包括以下几点:

  1. 分离关注点:AOP允许开发者将横切关注点(如日志记录、安全检查、事务管理等)从业务逻辑中分离出来,使得这些关注点的实现可以独立于业务逻辑进行。
  2. 代码重用:通过AOP,横切关注点的实现可以在多个地方重用,避免了重复编写相同功能的代码,提高了代码的复用性。
  3. 动态代理:AOP通常使用动态代理技术在不修改源码的基础上对已有方法进行增强,这样可以在运行时动态地添加或修改行为,增加了程序的灵活性。
  4. 提高可维护性:由于横切关注点的代码被集中管理,当需要修改或更新这些功能时,只需在一个地方进行修改,而不需要在散布于各处的业务逻辑代码中寻找和修改,大大提高了代码的可维护性。
  5. 设计更清晰:使用AOP可以使系统设计更加清晰,因为相关的代码被组织在一起,而不是分散在多个类或对象中。
  6. 减少模块间耦合:通过将横切关注点与业务逻辑分离,可以减少模块之间的耦合度,使得各个模块更加独立,易于理解和测试。
  7. 提升效率:在大型项目中,使用AOP可以节省大量的开发时间,因为开发者不需要手动在每个业务逻辑中添加横切关注点的代码。

综上所述,AOP是一种强大的编程范式,其可以提高代码的重用性、可维护性和清晰性,同时减少模块间的耦合,提高开发效率。是现代软件开发中不可或缺的工具之一。

AOP中的相关术语

AOP(面向切面编程)是一种编程范式,用于将横切关注点从业务逻辑中分离出来,以提高代码的可维护性和重用性。以下是一些与AOP相关的术语及其解释:

  • Joinpoint(连接点):指在程序执行过程中可以被AOP框架拦截的特定点,通常是指方法。
  • Pointcut(切入点):定义需要对哪些连接点进行拦截,是选择连接点的一种方式。
  • Advice(通知/增强):定义了在连接点被拦截后要执行的动作,包括前置、后置、异常、最终和环绕通知。
  • Introduction(引介):一种特殊类型的通知,可以在不修改类代码的情况下,为类动态添加方法或字段。
  • Target(目标对象):AOP代理的目标对象,即被AOP增强的原始对象。
  • Weaving(织入):将切面应用到目标对象上,创建出被通知(增强)的对象的过程。Spring采用动态代理织入,而AspectJ提供编译期和类加载期织入。
  • Proxy(代理):经过AOP织入增强后生成的对象。
  • Aspect(切面):包含切入点和通知的模块化关注点,它定义了在哪些点执行什么样的增强逻辑。

这些术语共同构成了AOP的核心概念,它们使得AOP能够通过声明式的方式实现横切关注点的模块化,从而在不改变原有业务逻辑代码的基础上,增加额外的行为或功能。

Spring选择那种方式代理?

Spring主要使用两种方式进行AOP代理:JDK动态代理和CGLIB代理

首先,当目标对象实现了一个或多个接口时,Spring AOP会使用JDK动态代理。这是因为JDK动态代理要求目标对象必须实现接口,它通过反射机制在运行时动态地创建一个代理类,该代理类实现了与目标对象相同的接口,并在调用接口方法时提供预先定义的增强逻辑。

其次,如果目标对象没有实现任何接口,或者需要代理的是final类,Spring AOP将使用CGLIB代理。CGLIB是一个第三方库,它可以在内存中动态创建新的类,这些类继承自目标类并实现了所需的增强功能。从Spring 4.3版本开始,CGLIB已经包含在Spring框架中,因此不需要额外导入。

总的来说,这两种代理方式都允许在不修改原有代码的基础上,为目标对象添加额外的行为或功能。代理技术是实现AOP的核心和关键技术,它使得可以在运行时对目标对象的特定方法进行增强处理,如日志记录、安全检查等横切关注点的处理。通过这种方式,Spring AOP能够提高代码的重用性和可维护性,同时减少了模块间的耦合度。

Spring引入外部配置文件的方式

Spring框架提供了多种方式来引入外部配置文件,这些方式包括但不限于命令行参数、环境变量以及使用注解等。具体来看:

  1. 命令行参数:可以通过命令行参数指定一个配置文件,这会使得默认的application.propertiesapplication.yml文件失效,即指定的配置文件将替换默认文件。
  2. 环境变量:Spring Boot 支持通过环境变量来进行配置,这是一种在不同环境下使用同一套应用程序代码的常用方法。
  3. **@PropertySource **:可以使用@PropertySource注解在类路径下指定一个或多个属性文件。
  4. spring.config.import:通过设置spring.config.import属性,可以导入classpath下任意目录的文件作为配置文件。
  5. **@ImportResource **:使用@ImportResource注解可以直接加载Spring的XML配置文件。
  6. 全注解方式:Spring还提供了全注解的方式来加载配置,这种方式不需要显式的配置文件,而是通过注解来指定配置信息。

以上这些方式为开发者提供了灵活的配置选择,可以根据实际项目的需要和开发环境来选择最合适的配置方式。

相关文章
|
12天前
|
Java 数据库连接 开发者
Spring面试题系列-1
Spring面试题系列-1
20 1
|
12天前
|
设计模式 Java 数据库
Spring面试题系列-4
Spring面试题系列-4
18 1
|
12天前
|
设计模式 安全 Java
Spring面试题系列-6
Spring面试题系列-6
21 1
|
12天前
|
XML 缓存 Java
Spring面试题系列-2
Spring面试题系列-2
19 1
|
12天前
|
XML Java 数据格式
Spring面试题系列-3
Spring面试题系列-3
13 1
|
22天前
|
XML Java 数据库连接
Spring面试题
Spring面试题
|
7月前
|
前端开发 Java 数据格式
Spring 2023 常见面试题20道
2023 20个常见的Spring面试题以及参考答案
406 0
|
7月前
|
前端开发 Java 数据库连接
一篇文章带你搞定Spring的面试题
一篇文章带你搞定Spring的面试题
24 0
|
8月前
|
XML Java 数据格式
最新52道 Spring 面试题汇总
拿来吧你!最新Spring面试题汇总
95 0
|
11月前
|
Java 容器 Spring
面试题——spring
面试题——spring
42 0
面试题——spring