当前位置: 首页 > article >正文

面试题(仅供参考)

1. 什么是AOP和IOC?

Ioc(控制反转)
  •  控制反转(Inversion of Control)是一种设计原则,用来减少计算机程序中的依赖关系,它允许程序在运行时动态地适应和配置对象之间的关系。在Java中,IoC通常通过依赖注入(DI)实现,其实就减少我们在业务层通过new 来创建dao层对象。
  • 依赖注入(DI):组件之间的依赖关系由容器在运行时注入,而不是在代码中硬编码。
Aop(面向切面编程)

可以理解为面向方法编程,底层通过动态代理机制实现对目标方法编程

2.Spring常用注解

  1. @Component:用于标识一个类为Spring的组件。

  2. @Repository:用于标识一个类为数据访问组件。

  3. @Service:用于标识一个类为服务组件。

  4. @Controller:用于标识一个类为Spring MVC中的控制器。

  5. @Autowired:用于自动装配Bean。

  6. @Qualifier:与@Autowired一同使用,指定注入的Bean的名称。

  7. @Value:用于注入属性值。

  8. @Configuration:标识一个类为配置类。

  9. @Bean:在配置类中使用,用于声明一个Bean。

  10. @Scope:用于指定Bean的作用域。

  11. @PostConstruct:在Bean初始化完成后执行的方法。

  12. @PreDestroy:在Bean销毁之前执行的方法。

。。。

3. Spring Bean的生命周期与作用域

  • 生命周期:

    1. 实例化:通过构造方法或工厂方法创建Bean实例。

    2. 属性赋值:通过setter方法或直接赋值将属性注入。

    3. 初始化:调用@PostConstruct注解的方法或实现InitializingBean接口的afterPropertiesSet方法。

    4. 使用:Bean可以被应用程序使用。

    5. 销毁:调用@PreDestroy注解的方法或实现DisposableBean接口的destroy方法。

  • 作用域:

    1. singleton(默认): 在整个Spring容器中只有一个Bean实例。

    2. prototype: 每次注入或者通过getBean方法获取Bean时,都会创建一个新的实例。

    3. request: 每个HTTP请求都会创建一个新的实例,仅在Web应用中有效。

    4. session: 每个HTTP Session都会创建一个新的实例,仅在Web应用中有效。

    5. global-session: 类似于session作用域,但在整个应用的全局范围内有效,仅在Web应用中有效。

4. Spring的自动装配

Spring的自动装配是通过@Autowired注解实现的。它可以自动将符合类型的Bean注入到需要的地方。有三种自动装配的方式:

  • 按类型自动装配(byType): 通过属性的数据类型自动匹配并注入。

  • 按名称自动装配(byName): 通过属性的名称与Bean的名称匹配并注入。

  • 构造器自动装配(constructor): 类似于按类型自动装配,但是应用于构造方法。

5. Spring框架中都用到了哪些设计模式?

在Spring框架中,常见的设计模式包括:

  1. 单例模式(Singleton): Spring默认情况下使用单例模式,保证一个Bean在容器中只有一个实例。

  2. 工厂模式(Factory): Spring使用工厂模式通过ApplicationContext来创建和管理Bean。

  3. 代理模式(Proxy): Spring AOP的实现就使用了代理模式,包括静态代理和动态代理。

  4. 观察者模式(Observer): Spring中的事件机制就是观察者模式的一种实现。

  5. 策略模式(Strategy): Spring中的@Qualifier注解用于解决自动装配时的歧义性,可以看作是策略模式的一种应用。

这些设计模式有助于提高代码的可维护性、可扩展性,并降低组件之间的耦合度。


http://www.kler.cn/a/430684.html

相关文章:

  • PyQt4学习笔记2】QMainWindow
  • 【c++】类与对象详解
  • 基于SpringBoot的新闻资讯系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • GRN前沿:利用DigNet从scRNA-seq数据中生成基于扩散的基因调控网络
  • 四川正熠法律咨询有限公司正规吗可信吗?
  • 25寒假算法刷题 | Day1 | LeetCode 240. 搜索二维矩阵 II,148. 排序链表
  • 深入理解代理模式(Proxy):静态代理、动态代理与AOP
  • 基于SpringBoot的养老院管理系统的设计与实现
  • PS学习第一天
  • 记录 idea 启动 tomcat 控制台输出乱码问题解决
  • maven报错“找不到符号“
  • 将路径转换为短路径形式(8.3格式)解决 `CFile::Open` 无法打开长路径问题
  • 从零搭建网站(第三天)
  • 连续大涨,汉王科技跑步进入AI应用舒适区
  • Vue.js的生命周期
  • go使用闭包处理数据
  • List与Set、数组与ArrayList、ArrayList与LinkedList的区别
  • 【kafka】常用基础命令使用案例
  • ViT学习笔记(三) RepViT和TransNext简介
  • 【定时任务】定时任务技术实现原理和选型分析
  • 分析比对vuex和store模式
  • vue-生命周期
  • 力扣 螺旋矩阵-54
  • vscode 配置C/C++环境控制台参数
  • 【FLASH、SRAM和DRAM、CISC和RISC、冯诺依曼和哈佛】单片机内存结构的了解
  • 网页核心页面设计(第5章)