

Spring 是个java企业级应用的开源开发框架。Spring主要用于开发Java应用,反而有些扩展是针对构建J2EE平台的web使用。Spring 框架目标是精简Java企业级应用研发,并通过POJO为基础的编程模型促进良好的编程习惯。
以上是Spring 框架的完全系统:
这是完全的Spring模块,提供spring 框架的基础系统,BeanFactory 是 任何以spring为基础的使用的体系。Spring 框架构建在此模块之上,它使Spring成为一个容器。
Bean 工厂是工厂模式的一个实现,提供了控制反转功能,用于把使用的顶配和依赖从正真的使用源码中分离。
最常见的BeanFactory 实现是XmlBeanFactory 类。
最常见的就是org.springframework.beans.factory.xml.XmlBeanFactory ,它按照XML文件中的概念加载beans。该容器从XML 文件读取配置元数据并用它去创建一个完全配置的功能或使用。
AOP模块用来发给我们的Spring应用做面向切面的研发, 很多支持由AOP联盟提供,如此就保证了Spring和这些AOP框架的共通性。这个系统将元数据编程引入Spring。
通过使用JDBC抽象和DAO模块,确保代码的简洁,并能规避资源错误关闭致使的难题,它在这些不同的的错误信息之上,提供了一个统一的异常访问层。它还借助Spring的AOP 模块给Spring应用中的对象提供事务管理服务。
Spring 通过提供ORM模块,支持我们在直接JDBC之上使用一个对象/关系映射映射(ORM)工具,Spring 支持内置主流的ORM框架,如Hiberate,JDO和 iBATIS SQL Maps。Spring的事宜管理同样支持以下一切ORM框架及JDBC。
Spring的WEB模块是建构在application context 模块基础之上,提供一个适合web使用的上下文。这个系统也涵盖支持多种面向web的任务,如透明地处理多个文档上传请求和流程级请求参数的绑定到你的业务对象。它也是对Jakarta Struts的支持。
Spring配置文档是个XML 文件,这个文档包括了类资料,描述了怎么配置这些,此外怎么互相调用。
Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,顶配对象,如果管理其他对象的整个生命周期。
IOC 或 依赖注入把使用的源码量降到最低。它使使用容易测试,单元测试不再需要单例和JNDI查找机制。最小的代价和最小的侵入性使松散耦合得以实现。IOC容器支持加载服务时的饿汉式初始化和懒加载。
Application contexts提供一种方法处理文本消息,一个通常的作法是加载文档资源(比如镜像),这些可以向注册为器的bean发布事件。另外,在盛器或容器内的对象上执行的某些不得不由bean工厂以程序化方式处理的操作,可以在Application contexts中以声明的手段处理。Application contexts实现了MessageSource接口,该接口的实现以可插拔的手段提供获取本地化消息的原理。

依赖注入,是IOC的一个方面,是个通常的定义,它有多种解释。这定义是说你不用创建对象,而只需要描述它怎么被创建。你不在代码里直接组装你的模组和服务,反而要在顶配文档里描述哪些元件需要哪些服务,以后一个容器(IOC容器)负责把你们组装起来。
你两种依赖形式都可以使用,构造器注入和Setter方法注入。最好的解决方案是用构造器参数实现强制依赖,setter方式实现可选依赖。
Spring beans 是某些产生Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。比如,以XML文件中<bean/> 的方式定义。
Spring 框架定义的beans都是单件beans。在bean tag中有个特性”singleton”,或者它被赋为TRUE,bean 就是单件,如果就是一个 prototype bean。默认是TRUE,不过一切在Spring框架中的beans 缺省都是单件。
一个Spring Bean 的概念包括容器必知的所有配置元数据,涵盖怎么创建一个bean,它的生命周期详情及它的依赖。
这里有三种重要的原理给Spring 容器提供配置元数据。
XML配置文档。
基于注解的顶配。
基于java的顶配。
当定义一个<bean> 在Spring里,我们还会给这个bean声明一个作用域。它可以通过bean 定义中的scope属性来定义。如,当Spring要在需要的时候每次生产一个新的bean实例,bean的scope属性被指定为prototype。另一方面,一个bean每次使用的时候必须前往同一个实例,这个bean的scope 属性 必须设为 singleton。
Spring框架支持以上五种bean的作用域:
缺省的Spring bean 的作用域是Singleton.
不,Spring框架中的单例bean不是线程安全的。
有两个重要的bean 生命周期方法,第一个是setup , 它是在盛器加载bean的时候被读取。第二个方法是 teardown 它是在盛器卸载类的时候被读取。
The bean 标签有两个重要的特性(init-method和destroy-method)。用这些你可以自己定做初始化和注销方式。它们也是相应的注解(@PostConstruct和@PreDestroy)。

当一个bean仅被用作另一个bean的特性时,它能被声明为一个内部bean,为了定义inner bean,在Spring 的 基于XML的 配置元数据中,可以在 <property/>或 <constructor-arg/> 元素内使用<bean/> 元素,外部bean通常是匿名的,这些的Scope一般是prototype。
Spring提供以上几种集合的顶配元素:
装配,或bean 装配是指在Spring 容器中把bean组装到一起,前提是容器需要明白bean的依赖关系,怎么通过依赖注入来把这些装配到一起。
Spring 容器能够自动装配相互合作的bean,这意味着容器不需要<constructor-arg>和<property>配置,能借助Bean工厂自动处理bean之间的协同。
有五种自动装配的手段,可以用于指导Spring容器用自动装配形式来进行依赖注入。
自动装配的局限性是:
可以。
基于Java的顶配,禁止你在少量的Java注解的帮助下,进行你的大部分Spring配置而非借助XML文件。
以@Configuration 注解为例,它用于标记类可以拿来一个bean的概念,被Spring IOC容器使用。另一个例子是@Bean注解,它指出此原理将会前往一个对象,也是一个bean注册进Spring应用上下文。
比较于XML文件,注解型的顶配依赖于通过数组码元数据装配元件,而非尖括号的声明。
开发者通过在相应的类,原理或特性上使用注解的手段,直接组件类中进行配置,而不是使用xml描述bean的装配关系。
注解装配在默认情形下是不开启的,为了使用注解装配,我们必须在Spring配置文档中配置 <context:annotation-config/>元素。
这个注解显示bean的特性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationException。
@Autowired 注解提供了更细粒度的控制spring aop 面试 知乎,涵盖在何处以及怎么完成自动装配。它的用法和@Required一样,修饰setter方式、构造器、特性如果具备任意名称和/或多个取值的PN方法。
当有多个相近类型的bean却只有一个需要自动装配时,将@Qualifier 注解和@Autowire 注解结合使用以去除这样混淆,指定需要装配的确凿的bean。

使用SpringJDBC 框架,资源管理和错误处理的代价就会被减小。所以开发者只需写statements 和 queries从数据存取数据,JDBC也可以在Spring框架提供的模板类的帮助下更有效地被使用,这个模版叫JdbcTemplate (实例见这里here)
JdbcTemplate 类提供了诸多快捷的原理解决诸如把数据转变成完全数据类型或对象,执行写好的或可读取的操作语法,提供自定义的数据错误处理。
Spring对数据访问对象(DAO)的支持旨在简化它和数据访问技术如JDBC,Hibernate or JDO 结合使用。这使我们可以方便切换持久层。编码时也不用担心会捕捉每种技术特有的异常。
在Spring中有两种手段访问Hibernate:
Spring支持以上ORM:
用Spring的 SessionFactory 调用 LocalSessionFactory。集成过程分三步:
Spring支持两种类型的事宜管理:
大多数Spring框架的用户选择声明式事务管理,因为它对使用源码的影响最小,即使更合乎一个无侵入的轻量级容器的思维。声明式事务管理要优于编程式事务管理,并且比编程式事务管理(这样手段禁止你通过代码控制事务)少了一点灵活性。
面向切面的编程,或AOP, 是一种编程技术,禁止程序模块化横向切割关注点,或横切典型的义务划分,如日志和事宜管理。
AOP核心就是切面,它将多个类的通用行为封装成可重用的系统,该系统含有一组API提供横切功能。比如,一个日志系统可以被称作日志的AOP切面。根据需求的不同,一个应用程序可以有若干切面。在Spring AOP中,切面通过带有@Aspect注解的类实现。
关注点是使用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。
横切关注点是一个关注点,此关注点是整个使用就会使用的系统,并影响整个使用,诸如日志,安全和数据传输,几乎应用的每位系统都需要的系统。因此它们都属于横切关注点。
连接点代表一个应用程序的某个位置,在这个位置我们可以插入一个AOP切面,它实际上是个应用程序执行Spring AOP的位置。
通知是个在原理执行前或执行后要做的姿势,实际上是流程执行时要通过SpringAOP框架触发的代码段。
Spring切面可以应用五种类型的通告:
切入点是一个或一组连接点,通告将在它们位置执行。可以通过表达式或匹配的手段指明切入点。
引入允许我们在已存在的类中增强新的原理和特性。
被一个或者多个切面所通知的对象。它往往是一个代理对象。也指被通知(advised)对象。
代理是通告目标对象后创建的对象。从客户端的角度看,代理对象和目标对象是一样的。
BeanNameAutoProxyCreator
DefaultAdvisorAutoProxyCreator
Metadata autoproxying
织入是将切面和到这些使用类型或对象连接或创建一个被通知对象的过程。
织入可以在编译时,加载时,或运行时完成。
在这样现象下,切面由常规类还有基于XML的顶配实现。
在这样现象下(基于@AspectJ的实现),涵盖到的切面声明的格调与带有java5标注的普通java类一致。
Spring 配备完善Web 应用的全系统MVC框架。Spring可以很便利地和这些MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制思路清晰地隔离。它也禁止以声明的手段把请求参数和业务对象绑定。
Spring的MVC框架是围绕DispatcherServlet来设计的,它用于处理所有的HTTP请求和号召。
WebApplicationContext 继承了ApplicationContext 并增强了一些WEB应用必备的特有功能spring aop 面试 知乎,它不同于一般的ApplicationContext ,因为它能处理主题,并找出被关联的servlet。
控制器提供一个访问应用程序的行为,此行为往往通过服务接口实现。控制器解析用户输入并将其转换为一个由视图呈现给用户的模型。Spring用一个非常抽象的手段实现了一个控制层,禁止用户创建多种用途的控制器。
该注解显示该类扮演控制器的反派,Spring不需要你继承任何其它控制器基类或引用Servlet API。
该注解是用于映射一个URL到一个类或一个特定的方处理法上。
转载自并发编程网 – ifeve.com本文链接地址: 69道Spring面试题和答案
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-119208-1.html
让我们知道你一直记得海浪的好
换来十年安稳
我当击沉之