,Java最全的试题。大家好,我是Java最全考试题库的姐姐。今天,这是JavaEE面试问题系列的第三部分。主要总结了Spring相关的问题。后续会沿着第一篇开头的知识线继续总结,每日更新!如果我一百天能做一百个改变,希望你也能跟着一百天一百天养成好习惯。谈谈你对Spring的理解?Spring是为简化企业应用程序开发而创建的开源框架。Spring可以让简单的JavaBean实现以前只有EJB才能实现的功能。Spring是一个IOC和AOP容器框架。Spring容器的主要核心是:控制反转(IOC)。在传统的java开发模式中,当需要一个对象的时候,我们会通过new或者getInstance直接或者间接调用构造函数来创建一个对象。在spring开发模式下,spring容器使用工??厂模式为我们创建需要的对象。我们不需要自己创建,直接调用spring提供的对象即可。这就是控制反转的思想。依赖注入(DI),spring在我们创建需要的对象时,利用javaBean对象的set方法或者带参数的构造函数,自动将其属性设置为需要的值的过程就是依赖注入的思想.面向切面编程(AOP),在面向对象编程(oop)的思想中,我们将事物垂直抽取出来,成为一个个对象。在面向切面编程中,我们将每个对象的一些相似的切面水平地抽取出来,成为一个切面,并在这个切面上执行一些功能,如权限控制、事务管理、日志记录等。公共操作处理的过程是面向切面编程的思想。AOP底层是动态代理。如果是接口,则使用JDK动态代理,如果是类,则使用CGLIB实现动态代理。Spring有哪些设计模式?工厂模式:BeanFactory是简单工厂模式的体现,用于创建对象实例;单例模式:Bean默认为单例模式。代理模式:Spring的AOP功能使用了JDK的动态代理和CGLIB字节码生成技术;模板方法:用于解决代码重复问题。例如。RestTemplate、JmsTemplate、JpaTemplate。观察者模式:定义对象键的一对多依赖关系。当一个对象的状态发生变化时,所有依赖它的对象都会得到通知并更新,比如SpringApplicationListener中监听器的实现。Spring的常用注解?@Required:该注解应用于设置值方法@Autowired:该注解应用于value设置值方法、非设置值方法、构造函数和变量。@Qualifier:这个注解是和@Autowired配合使用,用来消歧特定bean的自动组装Springbean的生命周期?Bean定义:使用配置文件中的来定义。Bean初始化:有两种初始化方式:①通过在配置文件中指定init-method属性完成②实现org.springframwork.beans.factory.InitializingBean接口bean调用:获取bean实例有三种方式,以及调用bean销毁:销毁有两种方式①使用配置文件中指定的destroy-method属性②实现org.springframwork.bean.factory.DisposeableBean的接口Spring是如何管理事务的?程序化交易,硬编码在代码中。声明式事务,在配置文件中配置声明式事务分为:①基于XML的声明式事务②基于注解的声明式事务Spring的事务传播行为有哪些?1.PROPAGATION_REQUIRED:如果没有当前事务,则创建一个新事务。如果有当前交易,则加入交易。此设置是最常用的设置。2.PROPAGATION_SUPPORTS:支持当前事务,如果当前有事务,则加入事务,如果当前没有事务,则作为非事务执行。3.PROPAGATION_MANDATORY:支持当前事务,如果当前有事务,则加入事务,如果当前没有事务,则抛异常。4.PROPAGATION_REQUIRES_NEW:创建新事务,不管当前有没有事务,都创建一个新事务。5.PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作。如果有当前事务,则暂停当前事务。6.PROPAGATION_NEVER:以非事务方式执行。如果有当前事务,则会抛出异常。7.PROPAGATION_NESTED:如果有当前事务,则在嵌套事务中执行。如果当前没有事务,则根据REQUIRED属性执行。Spring事务的隔离级别?1.ISOLATION_DEFAULT:这是PlatfromTransactionManager的默认隔离级别,使用数据库默认的事务隔离级别。2.ISOLATION_READ_UNCOMMITTED:读未提交,允许另一个事务看到本事务未提交的数据。3.ISOLATION_READ_COMMITTED:读已提交,保证一个事务修改的数据只有在提交后才能被另一个事务读取,并且可以看到这个事务对已有记录的更新。4.ISOLATION_REPEATABLE_READ:可重复读,保证一个事务修改的数据在提交后可以被另一个事务读取,但是看不到事务对已有记录的更新。5.ISOLATION_SERIALIZABLE:一个事务在执行过程中看不到其他事务对数据库所做的更新。Spring的建议是什么?有哪些类型?通知是在方法执行之前或之后要完成的操作。它实际上是程序执行时由SpringAOP框架触发的一段代码。Spring切面可以应用五种通知:before:预通知,在方法执行之前调用。after:方法执行后调用的通知,不管方法执行是否成功。after-returning:仅在方法成功完成后才执行的通知。after-throwing:当方法退出并抛出异常时执行的通知。around:方法执行前后调用的通知。什么是SpringIOC?国际奥委会有什么优势?IOC:Inversionofcontrol,SpringIOC负责创建对象和管理对象。通过依赖注入(DI),组装对象,配置对象,管理这些对象的整个生命周期。优点:IOC或依赖注入最大限度地减少了应用程序的代码大小。它使应用程序易于测试,单元测试不需要单例和JNDI查找机制。以最小的开销和最小的干扰可以实现松散耦合。IOC容器在加载服务时支持饥饿初始化和懒加载。BeanFactory和ApplicationContext有什么区别?BeanFactory基础类型的IOC容器提供完整的IOC服务支持。如果不指定,默认采用惰性初始化策略。相对而言,容器启动的初始阶段是快速的,需要的资源有限。ApplicationContextApplicationContext建立在BeanFactory的基础上,是一个比较高级的容器实现。除了BeanFactory的所有支持,ApplicationContext还提供了事件发布、国际化支持等功能。ApplicationContext管理的对象都是在容器启动后默认初始化绑定的。Spring支持的几种bean的作用域是什么?Spring框架支持以下五种bean作用域:singleton:bean在每个Springioc容器中只有一个实例。原型:一个bean定义可以有多个实例。request:为每个http请求创建一个bean,这个作用域只在基于web的SpringApplicationContext的情况下有效。session:在一个HTTPSession中,一个bean定义对应一个实例。此范围仅在基于Web的SpringApplicationContext的上下文中有效。global-session:在一个全局的HTTPSession中,一个bean定义对应一个实例。此范围仅在基于Web的SpringApplicationContext的上下文中可用。默认的Springbean作用域是Singleton。Spring框架中的单例bean是线程安全的吗?不是线程安全的。当有共享变量的时候,大家都可以调用,这时候就存在线程安全问题了。什么是bean自动装配?自动装配有哪些方式?自动组装:无需在Spring配置文件中描述javaBean之间的依赖关系(如配置、)。IOC容器会自动建立javabean之间的关联关系。自动装配的五种方式:no:默认不进行自动装配,而是通过显式设置ref属性来进行装配。byName:Spring容器通过参数name的自动组装,在配置文件中发现bean的autowire属性设置为byname,然后容器尝试匹配并组装与bean的属性同名的bean。byType:通过参数类型自动装配,Spring容器在配置文件中发现bean的autowire属性被设置为byType,然后容器尝试匹配、组装,bean的属性与bean的类型相同。如果多个bean符合条件,则抛出错误。constructor:该方法类似于byType,但必须提供给constructor参数。如果带参数的构造函数参数类型不明确,则会抛出异常。自动检测:首先尝试使用构造函数自动装配,如果不起作用,请使用byType方式。spring的AOP是什么?AOP:全称AspectOrientedProgramming,即:面向方面的编程。AOP是OOP(ObjectOrientedProgramming,面向对象程序设计)的延续,是软件开发中的热点,是Spring框架中的重要内容,是函数式编程的衍生范式。AOP可以用来隔离业务逻辑的各个部分,从而降低业务逻辑各个部分之间的耦合度,提高程序的复用性,同时提高开发效率。提取我们程序的重复代码,在需要执行的时候使用动态代理技术,在不修改源代码的情况下,增强我们现有的方法。AOP采用水平抽取机制来替代传统垂直继承体系的重复代码。AOP技术采用一种叫做“横切”的技术,将封装对象内部进行剖析,将影响多个类的公共行为封装成一个可重用的模块,并命名为“Aspect”,即切面。所谓“切面”,简单来说就是将与业务无关但被业务模块共同调用的逻辑或职责进行封装,以减少系统中代码的重复,降低模块之间的耦合度,并促进未来的可操作性和可维护性。AOP使用“横切”技术,将软件系统分为两部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点就是往往会出现在核心关注点的多个地方,而且所有的地方基本都是相似的,比如授权认证,日志,事物。AOP的作用是分离系统中的各种关注点,将核心关注点与横切关注点分开。AOP的核心是切面,将多个类的共同行为封装到一个可重用的模块中,模块中包含一组提供横切功能的API。例如,日志记录模块可以称为日志记录的AOP方面。根据要求,应用程序可以有几个方面。在SpringAOP中,方面是通过使用@Aspect注解的类来实现的。经典应用:事务管理、性能监控、安全检查、缓存、日志记录等AOP实现方式?aop底层是通过代理机制实现的。接口+实现类:spring使用jdk的动态代理Proxy。实现类:spring采用cglib字节码增强。AOP中有哪些概念?①Joinpoint(连接点):要截取的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点。②Pointcut(切点):截取哪些Joinpoints,即增强的连接点。③Advice(notification/enhancement):拦截Joinpoint后做什么,增强代码。④Introduction(介绍):Introduction是一种特殊的通知。在不修改类代码的情况下,Introduction可以在运行时动态地为类添加一些方法或Field。⑤Target(目标对象):目标类,需要代理的类⑥Weaving(编织):指对目标对象应用增强,创建新的代理对象的过程。Spring使用动态代理编织,而AspectJ使用编译时编织和类加载时编织。⑦代理(proxy):代理类,一个类经过AOP编织增强后,生成一个结果代理类。⑧Aspect(切面):是entrypoint和notification(介绍)的组合。Spring中如何定义类的作用域?在Spring中定义时,您可以为该bean声明一个范围。它可以通过bean定义中的scope属性来定义。Spring每次需要生成一个新的bean实例时,指定bean的scope属性为prototype。一个bean每次使用都必须返回同一个实例,并且这个bean的scope属性被指定为singleton。