zoukankan      html  css  js  c++  java
  • java(框架)面试要点6

    • BeanFactory 和 ApplicationContext 有什么区别   

    第一, BeanFactory

    BeanFactory实际上是实例化,配置和管理众多bean的容器。 这些bean通常会彼此合作,因而它们之间会产生依赖。 BeanFactory使用的配置数据可以反映这些依赖关系中 (一些依赖可能不像配置数据一样可见,而是在运行期作为bean之间程序交互的函数)。

    一个BeanFactory可以用接口org.springframework.beans.factory.BeanFactory表示, 这个接口有多个实现。 最常使用的的简单的eanFactory实现是org.springframework.beans.factory.xml.XmlBeanFactory。 (这里提醒一下:ApplicationContext是BeanFactory的子类, 所以大多数的用户更喜欢使用ApplicationContext的XML形式)。

    要创建XmlBeanFactory,需要传递一个org.springframework.core.io.Resource实例个构造函数。此Resource对象提供XML文件给工厂。

    Spring提供了有用的Resource实现。

    org.springframework.core.io.ByteArrayResource定义内容有一组字节给定的资源

    org.springframework.core.io.ClassPathResource定义可以从classpath提取的资源

    org.springframework.core.io.DescriptiveResource定义包含资源描述符但是实际没有可以读取的资源

    org.springframework.core.io.FileSystemRescource定义可以从文件系统提取的资源

    org.springframework.core.io.InputStreamResource定义可以从输入流提取的资源

    org.springframework.web.portlet.context.PortletContextResource定义可用在portlet上下文的资源

    org.springframework.web.portlet.context.suport.servletContextRescource定义可用在Servlet上下文中的资源

    org.springframework.core.io.UrlRescource定义可从给定的URl提取的资源

    ApplicationContext 和Resource 路径

    1.ClassPathResource:

    只有一种方式new ClassPathResource("applicationContext.xml");

    取得Resource接口的实例 后,可以使用getFile(),getInputStream()等方法来操作资源文件Resource 接口的事例只是资源文件一个抽象代表,指定的资源有可能不存在,可以使用exists()进行测试。

    以文件系统绝对路径和相对路径的两种方式进行访问;

    如:

    (1)绝对路径:Resource resource = context.getResource("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml")。

    (2)相对路径:但是如果使用相对路径要注意其根目录。例如在eclipse中,它的根目录就是你工程目录作为你的根目录。Resource resource = context.getResource("src/applicationContext.xml")。

    2.FileSystemResource:有两种方式;
    3.ServletContextResource:通过 ServletContextResource 以相对于Web应用根目录的方式进行访问。如:Resource resource = context.getResource("src/applicationContext.xml")。

    4.UrlResource :通过Java.NET.URL来访问资源,当然它也支持File格式:"file:"

    第二,ApplicationContext

    beans包提供了以编程的方式管理和操控bean的基本功能,而context包增加了ApplicationContext,它以一种更加面向框架的方式增强了BeanFactory的功能。多数用户可以以一种完全的声明式方式来使用ApplicationContext,甚至不用去手工创建它,但是却去依赖像ContextLoader的支持类,在J2EE的Web应用的启动进程中用它启动ApplicationContext。当然,这种情况下还可以以编程的方式创建一个ApplicationContext。
    Context包的基础是位于org.springframework.context包中的ApplicationContext接口。它是由BeanFactory接口集成而来,提供BeanFactory所有的功能。为了以一种更像面向框架的方式工作,context包使用分层和有继承关系的上下文类,包括:

    1.MessageSource,提供对i18n消息的访问;

    2.资源访问,比如URL和文件;

    3.事件传递给实现了ApplicationListener接口的bean;

    4.载入多个(有继承关系)上下文类,使得每一个上下文类都专注于一个特定的层次,比如应用的Web层

    在ApplicationContext的诸多实现中,有三个经常用到:

    1。ClassPathXmlApplicationContext:从类路径中的XML文件载入上下文定义信息,把上下文定义文件当作类路径资源。

    2。FileSystemXmlApplicationContext:从文件系统中的XML文件载入上下文定义信息。

    3。XmlWebApplicationContext:从Web系统中的XMl文件载入上下文信息。

    例如:

    //通过ApplicationContext来获取Spring的配置文件
    ApplicationContext actx=new FileSystemXmlApplicationContext("applicationContext.xml.xml");
    //通过Bean的id来获取bean
    Hello hello=(Hello)actx.getBean("HelloWorld");

    无论是那种实现,都是用getBean()方法,这不要奇怪,因为ApplicationContext接口扩展自BeanFactory接口。

    应用上下文与Bean工厂的另一个重要的区别就是关于单实例Bean是如何载入的。Bean工厂延迟载入所有的Bean,直到getbean()方法被调用是Bean才被创建。应用上下文则会在上下文启动后预载入所有的单实例Bean。通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。

    在spring中,两个最基本最重要的包是 org.springframework.beans 和 org.springframework.context. 这两个包中的代码为Spring的反向控制 特性(也叫作依赖注射)提供了基础。

    第一, BeanFactory

    BeanFactory实际上是实例化,配置和管理众多bean的容器。 这些bean通常会彼此合作,因而它们之间会产生依赖。 BeanFactory使用的配置数据可以反映这些依赖关系中 (一些依赖可能不像配置数据一样可见,而是在运行期作为bean之间程序交互的函数)。

    一个BeanFactory可以用接口org.springframework.beans.factory.BeanFactory表示, 这个接口有多个实现。 最常使用的的简单的eanFactory实现是org.springframework.beans.factory.xml.XmlBeanFactory。 (这里提醒一下:ApplicationContext是BeanFactory的子类, 所以大多数的用户更喜欢使用ApplicationContext的XML形式)。

    要创建XmlBeanFactory,需要传递一个org.springframework.core.io.Resource实例个构造函数。此Resource对象提供XML文件给工厂。

    Spring提供了有用的Resource实现。

    org.springframework.core.io.ByteArrayResource定义内容有一组字节给定的资源

    org.springframework.core.io.ClassPathResource定义可以从classpath提取的资源

    org.springframework.core.io.DescriptiveResource定义包含资源描述符但是实际没有可以读取的资源

    org.springframework.core.io.FileSystemRescource定义可以从文件系统提取的资源

    org.springframework.core.io.InputStreamResource定义可以从输入流提取的资源

    org.springframework.web.portlet.context.PortletContextResource定义可用在portlet上下文的资源

    org.springframework.web.portlet.context.suport.servletContextRescource定义可用在Servlet上下文中的资源

    org.springframework.core.io.UrlRescource定义可从给定的URl提取的资源

    ApplicationContext 和Resource 路径

    1.ClassPathResource:

    只有一种方式new ClassPathResource("applicationContext.xml");

    取得Resource接口的实例 后,可以使用getFile(),getInputStream()等方法来操作资源文件Resource 接口的事例只是资源文件一个抽象代表,指定的资源有可能不存在,可以使用exists()进行测试。

    以文件系统绝对路径和相对路径的两种方式进行访问;

    如:

    (1)绝对路径:Resource resource = context.getResource("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml")。

    (2)相对路径:但是如果使用相对路径要注意其根目录。例如在eclipse中,它的根目录就是你工程目录作为你的根目录。Resource resource = context.getResource("src/applicationContext.xml")。

    2.FileSystemResource:有两种方式;
    3.ServletContextResource:通过 ServletContextResource 以相对于Web应用根目录的方式进行访问。如:Resource resource = context.getResource("src/applicationContext.xml")。

    4.UrlResource :通过Java.NET.URL来访问资源,当然它也支持File格式:"file:"

    第二,ApplicationContext

    beans包提供了以编程的方式管理和操控bean的基本功能,而context包增加了ApplicationContext,它以一种更加面向框架的方式增强了BeanFactory的功能。多数用户可以以一种完全的声明式方式来使用ApplicationContext,甚至不用去手工创建它,但是却去依赖像ContextLoader的支持类,在J2EE的Web应用的启动进程中用它启动ApplicationContext。当然,这种情况下还可以以编程的方式创建一个ApplicationContext。
    Context包的基础是位于org.springframework.context包中的ApplicationContext接口。它是由BeanFactory接口集成而来,提供BeanFactory所有的功能。为了以一种更像面向框架的方式工作,context包使用分层和有继承关系的上下文类,包括:

    1.MessageSource,提供对i18n消息的访问;

    2.资源访问,比如URL和文件;

    3.事件传递给实现了ApplicationListener接口的bean;

    4.载入多个(有继承关系)上下文类,使得每一个上下文类都专注于一个特定的层次,比如应用的Web层

    在ApplicationContext的诸多实现中,有三个经常用到:

    1。ClassPathXmlApplicationContext:从类路径中的XML文件载入上下文定义信息,把上下文定义文件当作类路径资源。

    2。FileSystemXmlApplicationContext:从文件系统中的XML文件载入上下文定义信息。

    3。XmlWebApplicationContext:从Web系统中的XMl文件载入上下文信息。

    例如:

    //通过ApplicationContext来获取Spring的配置文件
    ApplicationContext actx=new FileSystemXmlApplicationContext("applicationContext.xml.xml");
    //通过Bean的id来获取bean
    Hello hello=(Hello)actx.getBean("HelloWorld");

    无论是那种实现,都是用getBean()方法,这不要奇怪,因为ApplicationContext接口扩展自BeanFactory接口。

    应用上下文与Bean工厂的另一个重要的区别就是关于单实例Bean是如何载入的。Bean工厂延迟载入所有的Bean,直到getbean()方法被调用是Bean才被创建。应用上下文则会在上下文启动后预载入所有的单实例Bean。通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。

    下面我总结下载入配置文件的方法:
    ApplicationContext

    1. ClassPathXmlApplicationContext 编译路径总有三种方式:
    1) ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    2)ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");

    3)ApplicationContext factory=new ClassPathXmlApplicationContext("file:E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
    2. FileSystemXmlApplicationContext用文件系统的路径总有两种相对与绝对路径
    1) ApplicationContext factory=new FileSystemXmlApplicationContext("src/applicationContext.xml");
    2) ApplicationContext factory=new FileSystemXmlApplicationContext("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
    3. XmlWebApplicationContext 是专为Web工程定制的。
    ServletContext servletContext = request.getSession().getServletContext();
    ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext );

    下面我总结下载入配置文件的方法:
    ApplicationContext

    1. ClassPathXmlApplicationContext 编译路径总有三种方式:
    1) ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    2)ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");

    3)ApplicationContext factory=new ClassPathXmlApplicationContext("file:E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
    2. FileSystemXmlApplicationContext用文件系统的路径总有两种相对与绝对路径
    1) ApplicationContext factory=new FileSystemXmlApplicationContext("src/applicationContext.xml");
    2) ApplicationContext factory=new FileSystemXmlApplicationContext("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
    3. XmlWebApplicationContext 是专为Web工程定制的。
    ServletContext servletContext = request.getSession().getServletContext();
    ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext );

    • Spring Bean 的生命周期

        

      

    • Spring IOC 如何实现

        https://www.cnblogs.com/ITtangtang/p/3978349.html

    • 说说 Spring AOP
    • Spring AOP 实现原理
    • 动态代理(cglib 与 JDK)
    • Spring 事务实现方式
    • Spring 事务底层原理
    • 如何自定义注解实现功能

        

    • Spring MVC 运行流程
    • Spring MVC 启动流程
    • Spring 的单例实现原理
    • Spring 框架中用到了哪些设计模式
    • Spring 其他产品(Srping Boot、Spring Cloud、Spring Secuirity、Spring Data、Spring AMQP 等)
  • 相关阅读:
    类的无参方法笔记
    类的无参预习内容
    类和对象
    洛谷 题解 P2010 【回文日期】
    洛谷 题解 CF711A 【Bus to Udayland】
    洛谷 题解 P2676 【超级书架】
    洛谷 题解 CF903B 【The Modcrab】
    洛谷 题解 P1585【魔法阵】
    HDU 2553【N皇后问题】
    一些函数
  • 原文地址:https://www.cnblogs.com/xuhewei/p/9684592.html
Copyright © 2011-2022 走看看