欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 第29周 面试题精讲(2)

第29周 面试题精讲(2)

2025/3/19 12:34:07 来源:https://blog.csdn.net/Sweeping_Robot/article/details/146354175  浏览:    关键词:第29周 面试题精讲(2)

Java面试题详解

一、谈谈你对IOC与DI的理解

问题:在面试过程中,面试官提起Spring时,一定会问到IOC和DI的相关问题。但往往我们对IOC和DI的理解都是一知半解。那么,什么是IOC呢?

答案

  • IOC(控制反转):是一种设计理念,要求将对象的创建和控制交给第三方容器,而不是在代码中直接使用new关键字创建对象。它通过将对象的创建和管理交给容器来实现解耦,使得代码更加灵活和可维护。
  • DI(依赖注入):是IOC的具体实现方式,指在运行时由容器动态地将依赖对象注入到需要它们的组件中。通过DI,组件不需要自己创建依赖对象,只需要声明需要的依赖,由容器负责提供,进一步实现了组件间的解耦。

示例

// 传统方式创建对象
IDao dao = new UserDao();// 使用Spring的IOC和DI
IDao dao = applicationContext.getBean("userDao", IDao.class);

解释

  • 在传统方式中,如果需要更换UserDao为其他实现类,需要修改所有使用UserDao的地方,维护成本高。
  • 使用Spring的IOC和DI后,对象的创建和管理交给ApplicationContext容器,通过配置文件或注解定义对象的依赖关系。当需要更换实现类时,只需修改配置文件,无需修改业务代码,大大提高了系统的可维护性和扩展性。

二、谈谈你对Spring框架中BeanFactory与ApplicationContext的区别

问题:在Spring框架中,BeanFactory和ApplicationContext有什么区别?

答案

  • BeanFactory:是IOC容器最顶级的接口,提供基本的IOC容器功能,如Bean的创建和管理。它的实现类只实现了IOC容器对象管理的基本功能,使用对象延迟加载,只有在首次调用getBean时才初始化Bean。
  • ApplicationContext:在BeanFactory基础上扩展了一系列功能,如国际化、自动装配、事件发布等。它在容器初始化时就预加载所有单例Bean,提高访问效率,是日常开发中常用的IOC容器。

表格对比

特性BeanFactoryApplicationContext
功能范围提供基本的IOC容器功能在BeanFactory基础上扩展了更多企业级功能
加载方式按需加载,只有在首次调用getBean时才初始化Bean容器初始化时就预加载所有单例Bean
配置方式支持XML、注解等多种配置方式支持XML、注解等多种配置方式
使用场景适用于轻量级应用或需要延迟加载的场景是Spring框架中推荐使用的IOC容器,适用于大多数应用场景

三、请你介绍一下Spring中使用了哪些设计模式

问题:在Spring中使用了哪些设计模式?

答案

  1. 工厂模式:IOC容器作为对象工厂,根据配置信息动态创建对象,如BeanFactoryApplicationContext
  2. 单例模式:Spring容器默认以单例模式管理Bean,确保每个Bean在容器中只有一个实例。
  3. 代理模式:AOP功能的底层实现,通过代理对象为原始对象增加额外功能,如JDK动态代理和CGLIB代理。
  4. 适配器模式:AOP中的通知机制使用适配器模式将不同类型的通知适配到统一的拦截器链中。
  5. 观察者模式:Spring事件驱动模型中,应用上下文发布事件,监听器监听并响应事件。
  6. 模板方法模式:在数据访问层(DAO)中,JdbcTemplate等模板类封装了JDBC操作的通用流程,简化了数据访问代码。

示例

  • 工厂模式:通过ApplicationContext获取Bean实例,无需关心创建细节。
  • 单例模式:配置文件中设置<bean>标签的singleton属性为true(默认值),即可让该Bean以单例模式存在。
  • 代理模式:使用@Aspect定义切面,通过代理为业务方法添加横切关注点,如日志记录、事务管理等。
  • 适配器模式:AOP中的MethodBeforeAdviceAfterReturningAdviceThrowsAdvice等适配器将不同类型的通知转换为统一的拦截器接口。
  • 观察者模式:通过ApplicationEventPublisher发布事件,ApplicationListener监听并处理事件,实现对象间的一对多依赖关系。
  • 模板方法模式:使用JdbcTemplatequeryForObjectqueryForList等模板方法,简化数据查询操作,无需关注底层JDBC细节。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词