spring面试题

问题1:什么是Spring框架?

答案1:Spring框架是一个轻量级的Java开发框架,用于简化企业级应用程序的开发。它提供了依赖注入、面向切面编程、事务管理等功能,同时整合了各种开源框架,为企业级应用开发提供了全面的解决方案。

问题2:列举一些重要的Spring模块?

答案2:Spring框架包括核心容器(Core Container)、数据访问/集成(Data Access/Integration)、Web(Web)、AOP和Instrumentation、测试(Testing)等模块。其中重要的模块包括Spring Core、Spring MVC、Spring Data、Spring Security等。

问题3:什么是IOC? 如何实现的?

答案3:IOC(Inversion of Control,控制反转)是Spring框架的核心概念,它通过将对象的创建和管理交给容器来实现。容器负责创建对象、维护对象之间的依赖关系,并在需要时将对象注入到其他对象中,从而实现了对象之间的解耦和灵活性。

Spring 中的 IoC 的实现原理就是工厂模式加反射机制。

问题4:什么是AOP?

答案4:AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,通过在程序执行过程中动态地将额外的行为织入到代码中,实现了模块化的横切关注点的功能。

问题5:有哪些AOP的概念?

答案5:AOP的概念包括切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)和引入(Introduction)等。切面定义了横切关注点,连接点是程序执行的特定点,通知是在连接点执行前、后或环绕时执行的代码,切点定义了连接点的集合,引入允许向现有类添加新方法。

问题6:AOP 有哪些应用场景?

答案6:AOP的应用场景包括日志记录、性能监控、事务管理、安全检查等。通过AOP,可以将这些横切关注点从业务代码中剥离出来,提高了代码的可维护性和可重用性。

问题7:有哪些AOP Advice通知的类型?

答案7:AOP的通知类型包括前置通知(Before Advice)、后置通知(After Advice)、返回通知(After Returning Advice)、异常通知(After Throwing Advice)和环绕通知(Around Advice)。

问题8:AOP 有哪些实现方式?

答案8:AOP的实现方式包括基于代理的AOP和基于字节码操作的AOP。基于代理的AOP通过创建代理对象,织入额外的行为来实现AOP。基于字节码操作的AOP通过动态修改类的字节码来实现AOP。

问题9:谈谈你对CGLib的理解?

答案9:CGLib是一个强大的、高性能的字节码生成库,它可以在运行时动态生成类的子类,从而实现对类的方法进行增强。在AOP中,CGLib可以用来创建目标类的代理对象,实现方法拦截和增强。与基于接口的代理相比,CGLib可以代理没有实现接口的类,因此更加灵活。

Spring AOP是基于动态代理的,如果要代理的对象实现了某个接口,那么Spring AOP就会使用JDK动态代理去创建代理对象;而对于没有实现接口的对象,就无法使用JDK动态代理,转而使用CGlib动态代理生成一个被代理对象的子类来作为代理。

这是因为JDK动态代理是基于接口的代理,它要求目标对象实现接口,然后通过Proxy.newProxyInstance()方法创建代理对象。而CGLib动态代理则是通过继承目标类来实现代理的,它可以代理没有实现接口的类,通过生成目标类的子类,并在子类中对方法进行增强来实现代理的功能。因此,Spring AOP根据目标对象是否实现接口来选择合适的代理方式,以实现代理对象的创建和方法增强。这种动态选择代理方式的机制使得Spring AOP能够灵活地应对不同类型的代理需求。

问题10:Spring AOP和AspectJ AOP有什么区别?

答案10:Spring AOP是基于代理的,它提供了一种轻量级的AOP实现,通过运行时生成代理对象来实现横切关注点的功能。而AspectJ AOP是一种更加强大和全面的AOP框架,它使用编译时织入或者类加载时织入的方式实现AOP,可以实现更细粒度的切面编程,但相对于Spring AOP来说更加复杂。

问题11:Spring中的bean的作用域有哪些?

答案11:Spring中的bean的作用域包括单例(Singleton)、原型(Prototype)、会话范围(Session)、请求范围(Request)和全局会话范围(Global Session)等。

问题12:Spring中的单例bean的线程安全问题了解吗?

答案12:单例bean在Spring中默认是共享的,如果多个线程同时访问一个单例bean,且该bean包含可变状态,就会存在线程安全问题。因此,需要在编写单例bean时注意线程安全,可以采用同步块、使用线程安全的数据结构等方式来保证线程安全。

通常情况下,将 controller、service 和 dao 等组件交给 Spring 管理并默认为单例是安全的,因为它们通常是设计为无状态的(stateless)。这意味着它们不会包含与特定客户端请求或特定业务逻辑相关的状态信息,因此在多个线程之间共享并不会引发线程安全问题。

对于 controller,它们通常是处理用户请求的入口,负责接收请求、调用相应的 service 方法,并返回结果。由于它们通常不包含状态信息,因此作为单例并由 Spring 管理是安全的。

对于 service,它们通常包含业务逻辑的实现,负责处理业务逻辑的具体细节。同样地,大多数 service 也是设计为无状态的,它们的方法应该是线程安全的。因此,将 service 作为单例交给 Spring 管理通常是合适的。

对于 dao,它们通常是用于和数据库进行交互的组件。在典型的应用中,dao 通常是无状态的,它们的方法通常是线程安全的。因此,将 dao 作为单例交给 Spring 管理通常也是没有问题的。

总的来说,将 controller、service 和 dao 交给 Spring 管理并默认为单例通常是安全的,因为它们通常是设计为无状态的。然而,在某些情况下,如果这些组件确实包含状态信息或者是非线程安全的,那么可能需要考虑将它们设计为非单例或者采取其他措施来确保线程安全。

问题13:Spring中的bean生命周期?

答案13:Spring中bean的生命周期包括实例化、属性赋值、初始化、销毁等阶段。在这些阶段中,Spring容器会调用相应的回调方法来完成bean的初始化和销毁工作,比如init-method和destroy-method等。

问题14:说说自己对于Spring MVC的了解?

答案14:Spring MVC是Spring框架中用于开发Web应用程序的一部分,它基于MVC(Model-View-Controller)设计模式,提供了前端控制器、处理器映射、视图解析等功能,使得开发Web应用更加简单和灵活。

问题15:Spring MVC的工作原理了解嘛?

答案15:Spring MVC的工作原理是基于DispatcherServlet来实现的,它充当前端控制器的角色,负责接收请求、调度处理器、执行处理器逻辑、返回视图等。通过HandlerMapping将请求映射到对应的处理器,再通过ViewResolver将处理器返回的逻辑视图名解析为具体的视图。

问题16:Spring框架中用到了哪些设计模式?

答案16:Spring框架中用到了诸多设计模式,包括工厂模式(BeanFactory)、单例模式(单例bean)、代理模式(AOP代理)、模板模式(JdbcTemplate)、观察者模式(事件机制)等。

问题17:@Component和@Bean的区别是什么?

答案17:@Component是用于标识一个普通的Spring管理组件的注解,而@Bean注解通常用于配置方法,用来声明一个由Spring容器管理的bean。@Component通常用于扫描组件,而@Bean通常用于Java配置类中定义bean。

问题18:将一个类声明为Spring的bean的注解有哪些?

答案18:将一个类声明为Spring的bean的注解包括@Component、@Service、@Repository、@Controller等,另外在Java配置类中使用@Bean注解也可以声明bean。

问题19:Spring事务管理的方式有几种?

答案19:Spring事务管理的方式包括编程式事务管理(Programmatic Transaction Management)和声明式事务管理(Declarative Transaction Management)两种方式。

问题20:Spring事务中的隔离级别有哪几种?

答案20:Spring事务中的隔离级别包括READ_UNCOMMITTED(读未提交)、READ_COMMITTED(读已提交)、REPEATABLE_READ(可重复读)、SERIALIZABLE(串行化)四种级别。

问题21:Spring事务中有哪几种事务传播行为?

答案21:Spring事务中的事务传播行为包括PROPAGATION_REQUIRED(如果存在事务,则加入;如果不存在,则新建)、PROPAGATION_SUPPORTS(支持当前事务,如果不存在则不使用事务)、PROPAGATION_MANDATORY(强制使用当前事务,如果不存在则抛出异常)等。

问题22:Bean Factory和ApplicationContext有什么区别?

答案22:Bean Factory是Spring框架中最基本的容器,提供了基本的DI功能,而ApplicationContext是Bean Factory的扩展,提供了更多的企业级功能,比如事件发布、国际化支持、AOP支持等。

问题23:如何定义bean的范围?可以通过多少种方式完成依赖注入?

答案23:可以通过在@Bean注解中设置scope属性来定义bean的范围,包括singleton、prototype、request、session、global session等。完成依赖注入可以通过构造器注入、Setter方法注入、接口注入、注解注入等多种方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值