Spring面试题总结包含《69》

Spring面试题总结包含《69》

网上发现有个Spring面试相关的《史上最全 69 道 Spring 面试题和答案》,也没够69题将就看吧,拿过来学习学习,借鉴一下!如有侵权,联系删除!13210324214@163.com

  1. 什么是Spring?
  2. 使用Spring框架的好处?
  3. Spring模块
  4. 核心容器(应用上下文)模块
  5. BeanFactory
  6. XMLBeanFactory
  7. AOP
  8. JDBC抽象和DAO模块
  9. 解释对象/关系映射集成模块
  10. 解释WEB模块
  11. Spring配置文件
  12. Spring IOC容器
  13. IOC优点
  14. ApplicationContext通常的实现是什么?
  15. Bean 工厂和 Application contexts  有什么区别?
  16. Spring依赖注入
  17. 有哪些不同类型的IOC(依赖注入)方式?
  18. 哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入?
  19. 什么是Spring beans
  20.  一个 Spring Bean 定义 包含什么?
  21. 如何给Spring 容器提供配置元数据?
  22. 你怎样定义类的作用域?
  23. 解释Spring支持的几种bean的作用域
  24. Spring框架中的单例bean是线程安全的吗?
  25. 解释Spring框架中bean的生命周期
  26.  哪些是重要的bean生命周期方法? 你能重载它们吗?
  27. 什么是Spring的内部bean?
  28. 在 Spring中如何注入一个java集合?
  29. 什么是bean装配?
  30. 什么是bean的自动装配?
  31. 解释不同方式的自动装配
  32. 自动装配有哪些局限性?
  33. 你可以在Spring中注入一个null 和一个空字符串吗?
  34. 什么是基于Java的Spring注解配置? 给一些注解的例子
  35. 什么是基于注解的容器配置?
  36. 怎样开启注解装配?
  37. @Required  注解
  38. @Autowired 注解
  39. @Qualifier 注解
  40. 在Spring框架中如何更有效地使用JDBC?
  41. JdbcTemplate
  42. Spring对DAO的支持
  43. 使用Spring通过什么方式访问Hibernate?
  44. Spring支持的ORM
  45. 如何通过HibernateDaoSupport将Spring和Hibernate结合起来?
  46. Spring支持的事务管理类型
  47. Spring框架的事务管理有哪些优点?
  48. 你更倾向用那种事务管理类型?
  49. 解释AOP
  50. Aspect 切面
  51. 在Spring AOP 中,关注点和横切关注的区别是什么?
  52. 连接点
  53. 切点
  54. 什么是引入?
  55. 什么是目标对象?
  56. 什么是代理?
  57. 有几种不同类型的自动代理?
  58. 什么是织入。什么是织入应用的不同点?
  59. 解释基于XML Schema方式的切面实现
  60. 解释基于注解的切面实现
  61. 什么是Spring的MVC框架?
  62. DispatcherServlet
  63. WebApplicationContext
  64. 什么是Spring MVC框架的控制器?
  65. @Controller 注解
  66. @RequestMapping 注解
  67. SpringAOP动态代理
  68. Spring 框架中都用到了哪些设计模式?
  69. Spring事务的实现方式和实现原理
  70. Spring的事务传播行为
  71. Spring中的隔离级别
  72. BeanFactory和ApplicationContext有什么区别?

 

答案:

  1. 什么是Spring?
  1. Spring是一个高度灵活的轻量级框架,其目的是降低企业级应用开发的复杂度。
  2. Spring 可以是使简单的 JavaBean 实现以前只有 EJB 才能实现的功能。( EJB是一个用来构筑企业级应用的服务器端可被管理组件)
  3. Spring 是一个 IOC 和 AOP 容器框架。
  4. 待补充。

 

  1. 使用Spring框架的好处?
  1. Spring轻量级,基本版本大约2MB。
  2. Spring被设计为侵入式设计,代码的污染极低,基于Spring的开发不需要依赖Spring API。
  3. Spring两大核心IOC和AOP。
  4. Spring支持其他优秀的框架(整合这一方面,Spring做的相当到位)。
  5. IOC:创建对象以及管理对象之间的调用关系,避免硬编码造成程序的耦合
  6. AOP:实现很多特定功能(安全、事务、日志、权限等)。
  7. Spring本身也提供了展现层(Spring MVC)和持久层(Spring JDBC)。
  8. 待补充。。。

 

  1. Spring模块

  1. Spring Core(核心容器):生产和管理bean
  2. Spring Context(应用上下文):提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等)
  3. Spring AOP(面向切面编程):减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理
  4. Spring DAO(JDBC和DAO模块)对jdbc抽象,简化数据访问异常处理
  5. Spring ORM(对象关系映射)对现有ORM框架支持
  6. Spring Web(Web)提供了基本的面向Web的综合特性,(文件上传等)
  7. Spring Web MVC(MVC模块)MVC框架是一个全功能的构建Web应用程序的MVC实现

 

 

  1. 核心容器(应用上下文)模块

这是基本的Spring模块,提供spring 框架的基础功能,BeanFactory 是 任何以spring为基础的应用的核心。Spring 框架建立在此模块之上,它使Spring成为一个容器。

 

  1. BeanFactory

Bean 工厂是工厂模式的一个实现,提供了控制反转功能,用来把应用的配置和依赖从正真的应用代码中分离。最常用的BeanFactory 实现是XmlBeanFactory 类

 

  1. XMLBeanFactory

最常用的就是org.springframework.beans.factory.xml.XmlBeanFactory ,它根据XML文件中的定义加载beans。该容器从XML 文件读取配置元数据并用它去创建一个完全配置的系统或应用。

 

  1. Spring AOP模块

AOP模块用于发给我们的Spring应用做面向切面的开发, 很多支持由AOP联盟提供,这样就确保了Spring和其他AOP框架的共通性。这个模块将元数据编程引入Spring。

 

  1. JDBC抽象和DAO模块

通过使用JDBC抽象和DAO模块,保证数据库代码的简洁,并能避免数据库资源错误关闭导致的问题,它在各种不同的数据库的错误信息之上,提供了一个统一的异常访问层。它还利用Spring的AOP 模块给Spring应用中的对象提供事务管理服务。

 

  1. 解释对象/关系映射集成模块

Spring 通过提供ORM模块,支持我们在直接JDBC之上使用一个对象/关系映射映射(ORM)工具,Spring 支持集成主流的ORM框架,如Hiberate,JDO和 iBATIS SQL Maps。Spring的事务管理同样支持以上所有ORM框架及JDBC。

 

  1. 解释WEB模块

Spring的WEB模块是构建在application context 模块基础之上,提供一个适合web应用的上下文。这个模块也包括支持多种面向web的任务,如透明地处理多个文件上传请求和程序级请求参数的绑定到你的业务对象。它也有对Jakarta Struts的支持。

 

  1. Spring配置文件

Spring配置文件是个XML 文件,这个文件包含了类信息,描述了如何配置它们,以及如何相互调用。

 

  1. Spring IOC容器

Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。

 

  1. IOC优点
  1. IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试,单元测试不再需要单例和JNDI查找机制。最小的代价和最小的侵入性使松散耦合得以实现。IOC容器支持加载服务时的饿汉式初始化和懒加载。

 

  1. ApplicationContext通常的实现是什么?

·FileSystemXmlApplicationContext :此容器从一个XML文件中加载beans的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。

·ClassPathXmlApplicationContext:此容器也从一个XML文件中加载beans的定义,这里,你需要正确设置classpath因为这个容器将在classpath里找bean配置。

·WebXmlApplicationContext:此容器加载一个XML文件,此文件定义了一个WEB应用的所有bean。

 

  1. Bean 工厂和 Application contexts  有什么区别?

Application contexts提供一种方法处理文本消息,一个通常的做法是加载文件资源(比如镜像),它们可以向注册为监听器的bean发布事件。另外,在容器或容器内的对象上执行的那些不得不由bean工厂以程序化方式处理的操作,可以在Application contexts中以声明的方式处理。Application contexts实现了MessageSource接口,该接口的实现以可插拔的方式提供获取本地化消息的方法。

 

  1. Spring依赖注入
  1. 不需要程序员自己new依赖类
  2. Spring容器帮我们new指定的实例并将实例注入到需要该对象的类中

 

 

  1. 有哪些不同类型的IOC(依赖注入)方式?
  1. Set注入
  2. 构造器注入
  3. 静态工厂的方法注入
  4. 实例工厂的方法注入

 

  1. 哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入?

构造器参数实现强制依赖,setter方法实现可选依赖

 

  1. 什么是Spring beans

Spring beans是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配和管理。这些beans通过容器中的配置的元数据创建。比如XML文件中<bean/>的形式定义。Spring定义的beans默认是单例的。

 

  1. 一个 Spring Bean 定义 包含什么?

一个 Spring Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个 bean,它的生命周期详情及它的依赖。

 

  1. 如何给Spring 容器提供配置元数据?
  1. XML配置文件
  2. 基于注解的配置
  3. 基于java的配置

 

  1. 你怎样定义类的作用域?

改变bean的scope属性值,默认单例

 

  1. 解释Spring支持的几种bean的作用域

5种作用域

 

    单例模式(singleton)Bean将只有一个实例,容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为

    原型模式(prototype)一旦创建成功,容器不在跟踪实例,也不会维护Bean实例的状态

    Request只有在Web应用中使用Spring时,对于每次HTTP请求,使用request定义的Bean都将产生一个新实例

    Session 只有在Web应用中使用Spring时,对于每次HTTP Session,使用session定义的Bean都将产生一个新实例

    Globalsession 只有在Web应用中使用Spring时,每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。

 

  1. Spring框架中的单例bean是线程安全的吗?

Spring框架中的单例bean不是线程安全的

Spring使用ThreadLocal解决线程安全问题

 

 

  1. 解释Spring框架中bean的生命周期

这是个大问题,得单独总结一哈!

 

  1.  哪些是重要的bean生命周期方法? 你能重载它们吗?

有两个重要的bean 生命周期方法,第一个是setup , 它是在容器加载bean的时候被调用。第二个方法是 teardown  它是在容器卸载类的时候被调用。

The bean 标签有两个重要的属性(init-method和destroy-method)。用它们你可以自己定制初始化和注销方法。它们也有相应的注解(@PostConstruct和@PreDestroy)。

 

  1. 什么是Spring的内部bean?

当一个bean仅被用作另一个bean的属性时,它能被声明为一个内部bean,为了定义inner bean,在Spring 的 基于XML的 配置元数据中,可以在 <property/>或 <constructor-arg/> 元素内使用<bean/> 元素,内部bean通常是匿名的,它们的Scope一般是prototype。

 <property name="" >

            <bean class="">

                <constructor-arg />

            </bean>

        </property>

 

  1. 在 Spring中如何注入一个java集合?

Spring 提供以下几种集合的配置元素:

<list>类型用于注入一列值,允许有相同的值。

<set> 类型用于注入一组值,不允许有相同的值。

<map> 类型用于注入一组键值对,键和值都可以为任意类型。

<props>类型用于注入一组键值对,键和值都只能为 String 类型。

 

  1. 什么是bean装配?

Spring 容器根据bean的依赖关系通过依赖注入来把他们装配到一起。

 

  1. 什么是bean的自动装配?

Spring 容器能够自动装配相互合作的bean,这意味着容器不需要<constructor-arg>和<property>配置,能通过Bean工厂自动处理bean之间的协作。

 

  1. 解释不同方式的自动装配

Spring容器有五种自动装配的方式、

·no:默认的方式是不进行自动装配,通过显式设置ref 属性来进行装配。

·byName:通过参数名 自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byname,之后容器试图匹配、装配和该bean的属性具有相同名字的bean。

·byType:通过参数类型自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byType,之后容器试图匹配、装配和该bean的属性具有相同类型的bean。如果有多个bean符合条件,则抛出错误。

·constructor:这个方式类似于byType, 但是要提供给构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常。

·autodetect:首先尝试使用constructor来自动装配,如果无法工作,则使用byType方式。

 

  1. 自动装配有哪些局限性?

·重写:你仍需用 <constructor-arg>和 <property> 配置来定义依赖,意味着总要重写自动装配。

·基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串,和类。

模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。

 

  1. 你可以在Spring中注入一个null 和一个空字符串吗?

可以

<null/>用于处理null值。Spring会把属性的空参数当作空字符串处理。以下的xml片断将email属性设为空字符串。

 

<bean class="ExampleBean">

  <property name="email"><value/></property>

</bean>

 

这等同于Java代码: exampleBean.setEmail("")。而null值则可以使用<null>元素可用来表示。例如:

 

<bean class="ExampleBean">

  <property name="email"><null/></property>

</bean>

 

上述的配置等同于Java代码:exampleBean.setEmail(null)。

 ————————————————

版权声明:本文为CSDN博主「xiao_jun_0820」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/xiao_jun_0820/article/details/7232079

 

  1. 什么是基于Java的Spring注解配置? 给一些注解的例子

基于Java的配置,允许你在少量的Java注解的帮助下,进行你的大部分Spring配置而非通过XML文件。

以@Configuration 注解为例,它用来标记类可以当做一个bean的定义,被Spring IOC容器使用。另一个例子是@Bean注解,它表示此方法将要返回一个对象,作为一个bean注册进Spring应用上下文。

元注解

https://blog.csdn.net/pengjunlee/article/details/79683621#%40Target%E6%B3%A8%E8%A7%A3

 

  1. 什么是基于注解的容器配置?

相对于 XML 文件,注解型的配置依赖于通过字节码元数据装配组件,而非尖括号的声明。开发者通过在相应的类,

方法或属性上使用注解的方式,直接组件类中进行配置,而不是使用 xml 表述 bean 的装配关系

 

  1. 怎样开启注解装配?

Spring 配 置 文 件 中 配置 <context:annotation-config/>

 

  1. @Resource 注解(不是Spring的,由J2EE提供,需要导入包javax.annotation.Resource)

通过一个bean定义的显式的属性值或通过自动装配

@Resource装配顺序

  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常

  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常

  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

 

  1. @Autowired 注解

按byType自动注入

@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用

 

  1. @Qualifier 注解

当有多个相同类型的bean却只有一个需要自动装配时,将@Qualifier 注解和@Autowire 注解结合使用以消除这种混淆,指定需要装配的确切的bean。

 

  1. 在Spring框架中如何更有效地使用JDBC?

使用SpringJDBC 框架,资源管理和错误处理的代价都会被减轻。所以开发者只需写statements 和 queries从数据存取数据,JDBC也可以在Spring框架提供的模板类的帮助下更有效地被使用,这个模板叫JdbcTemplate

 

  1. JdbcTemplate

JdbcTemplate 类提供了很多便利的方法解决诸如把数据库数据转变成基本数据类型或对象,执行写好的或可调用的数据库操作语句,提供自定义的数据错误处理。

 

  1. Spring对DAO的支持

Spring对数据访问对象(DAO)的支持旨在简化它和数据访问技术如JDBC,Hibernate or JDO 结合使用。这使我们可以方便切换持久层。编码时也不用担心会捕获每种技术特有的异常。

 

  1. 使用Spring通过什么方式访问Hibernate?

在Spring中有两种方式访问Hibernate:

·控制反转  Hibernate Template和 Callback

·继承 HibernateDAOSupport提供一个AOP 拦截器

 

  1. Spring支持的ORM

Spring支持以下ORM:

·Hibernate

·iBatis

·JPA (Java Persistence API)

·TopLink

·JDO (Java Data Objects)

·OJB

 

  1. 如何通过HibernateDaoSupport将Spring和Hibernate结合起来?

用Spring的 SessionFactory 调用 LocalSessionFactory。集成过程分三步:

·配置the Hibernate SessionFactory

·继承HibernateDaoSupport实现一个DAO

·在AOP支持的事务中装配

 

  1. Spring支持的事务管理类型

Spring支持两种类型的事务管理:

·编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。

声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。

 

  1. Spring框架的事务管理有哪些优点?

·它为不同的事务API  如 JTA,JDBC,Hibernate,JPA 和JDO,提供一个不变的编程模式。

·它为编程式事务管理提供了一套简单的API而不是一些复杂的事务API如

·它支持声明式事务管理。

·它和Spring各种数据访问抽象层很好得集成。

 

  1. 你更倾向用那种事务管理类型?

大多数Spring框架的用户选择声明式事务管理,因为它对应用代码的影响最小,因此更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式允许你通过代码控制事务)少了一点灵活性。

 

  1. 解释AOP

面向切面的编程,或AOP, 是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。

 

  1. Aspect 切面

封装通用业务逻辑的组件,可以作用到其他组件上。由 pointcut 和 advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义

 

  1. 在Spring AOP 中,关注点和横切关注的区别是什么?

关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。

横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日志,安全和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点。

 

  1. 连接点

程序运行中的一些时间点, 例如一个方法的执行, 或者是一个异常的处理

 

  1. 切点

 就是提供一组规则(使用 AspectJ pointcut expression language 来描述) 来匹配joinpoint, 给满足规则的 joinpoint 添加 Advice

 

  1. 什么是引入?

引入允许我们在已存在的类中增加新的方法和属性。

 

  1. 什么是目标对象?

织入 advice 的目标对象.

 

  1. 什么是代理?

代理是通知目标对象后创建的对象。从客户端的角度看,代理对象和目标对象是一样的。

 

  1. 有几种不同类型的自动代理?

BeanNameAutoProxyCreator

DefaultAdvisorAutoProxyCreator

Metadata autoproxying

 

  1. 什么是织入。什么是织入应用的不同点?

织入是将切面和到其他应用类型或对象连接或创建一个被通知对象的过程。

织入可以在编译时,加载时,或运行时完成。

 

  1. 解释基于XML Schema方式的切面实现

在这种情况下,切面由常规类以及基于XML的配置实现。

 

  1. 解释基于注解的切面实现

在这种情况下(基于@AspectJ的实现),涉及到的切面声明的风格与带有java5标注的普通java类一致。

 

  1. 什么是Spring的MVC框架?

Spring 配备构建Web 应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。

 

  1. DispatcherServlet

Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。

 

  1. WebApplicationContext

WebApplicationContext 继承了ApplicationContext  并增加了一些WEB应用必备的特有功能,它不同于一般的ApplicationContext ,因为它能处理主题,并找到被关联的servlet。

 

  1. 什么是Spring MVC框架的控制器?

控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输入并将其转换为一个由视图呈现给用户的模型。Spring用一个非常抽象的方式实现了一个控制层,允许用户创建多种用途的控制器。

 

  1. @Controller 注解

该注解表明该类扮演控制器的角色,Spring不需要你继承任何其他控制器基类或引用Servlet API。

 

  1. @RequestMapping 注解

该注解是用来映射一个URL到一个类或一个特定的方处理法上。

 

 

 

补充

  1. SpringAOP动态代理

    JDK动态代理

JDK动态代理只提供接口的代理,不支持类的代理。核心InvocationHandler接口和Proxy类InvocationHandler 通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;接着,Proxy利用 InvocationHandler动态创建一个符合某一接口的的实例,  生成目标类的代理对象。

    CGLib动态代理

Code Generation Library是一个代码生成的类库,可以在运行时动态的生成指定类的一个子对象,并覆盖其中的特定方法并添加增强代码,从而实现AOP。CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。

 

 

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

1、工厂模式:beanfactory

2、单例模式:Bean默认为单例模式

3、代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术

4、模板方法:用来解决代码重复的问题,RestTemplate, JpaTemplate

5、观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新

 

 

  1. Spring事务的实现方式和实现原理

Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。真正的数据库层的事务提交和回滚是通过binlog或者redo log实现的。

 

事务的种类

 

①编程式事务管理使用TransactionTemplate

 

②声明式事务管理,其本质是通过AOP功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

 

声明式事务优点:不需要在业务逻辑代码中掺杂事务管理的代码

 

声明式事务缺点:最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别

 

  1. Spring的事务传播行为

required:必须在事务中运行,如果没有,就创建新事物。

Supports:支持事务,有没有事务都可以。

Mandatory:当前没有事务就会抛出异常

Required_new:新建事务,如果当前存在事务,就把当前事务挂起。

Not_supported:不需要事务,如果存在事务中,当前事务会挂起,方法完成,事务继续

Never:不能在事范围内执行,否则抛出

Nested:不管存不存在事务,都会开启一个事务,当前存在就嵌套,不存在就搞一个新的

 

 

  1. Spring中的隔离级别

    default:默认,使用后端数据库默认的隔离级别

    Read_uncommitted:允许读还未提交已变数据,导致脏、幻、不可重复读

    Read_committed:允许并发事务提交之后读,防止脏读,不能防幻、不可重复读

    Repeatable_read:对相同字段多次读取数据一致,幻读可能发生

    Serializable:完全服从ACID的隔离级别,性能是最差的

 

一般选择第二个提交读隔离级别,出现幻读和不可重复读,可以在特定场合使用悲观锁和乐观锁解决

 

 

  1. BeanFactory和ApplicationContext有什么区别?

BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。

 

    BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。

    ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能:继承MessageSource,因此支持国际化;统一的资源文件访问方式;提供在监听器中注册bean的事件;同时加载多个配置文件;载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。

    BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化。

    ApplicationContext,它是在容器启动时,一次性创建了所有的Bean

    相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢

    BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式创建,如使用ContextLoader

    BeanFactory需要手动注册,而ApplicationContext则是自动注册

 

 

  1. 待补充。。。

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值