1. 什么是spring?
Spring 是个java企业级利用的开源开发框架。Spring次要用来开发Java利用,然而有些扩大是针对构建J2EE平台的web利用。Spring 框架指标是简化Java企业级利用开发,并通过POJO为根底的编程模型促成良好的编程习惯。
2. 应用Spring框架的益处是什么?
轻量:Spring 是轻量的,根本的版本大概2MB。
管制反转:Spring通过管制反转实现了涣散耦合,对象们给出它们的依赖,而不是创立或查找依赖的对象们。
面向切面的编程(AOP):Spring反对面向切面的编程,并且把利用业务逻辑和零碎服务离开。
容器:Spring 蕴含并治理利用中对象的生命周期和配置。
MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
事务管理:Spring 提供一个继续的事务管理接口,能够扩大到上至本地事务下至全局事务(JTA)。
异样解决:Spring 提供方便的API把具体技术相干的异样(比方由JDBC,Hibernate or JDO抛出的)转化为统一的unchecked 异样。
3. Spring由哪些模块组成?
以下是Spring 框架的根本模块:
Core module
Bean module
Context module
Expression Language module
JDBC module
ORM module
OXM module
Java Messaging Service(JMS) module
Transaction module
Web module
Web-Servlet module
Web-Struts module
Web-Portlet module
4. 外围容器(利用上下文) 模块。
这是根本的Spring模块,提供spring 框架的根底性能,BeanFactory 是任何以spring为根底的利用的外围。Spring 框架建设在此模块之上,它使Spring成为一个容器。
5. BeanFactory – BeanFactory 实现举例。
BeanFactory是工厂模式的一个实现,提供了管制反转性能,用来把利用的配置和依赖从真正的利用代码中拆散。最罕用的BeanFactory 实现是XmlBeanFactory 类。
6. XMLBeanFactory
最罕用的就是org.springframework.beans.factory.xml.XmlBeanFactory ,它依据XML文件中的定义加载beans。该容器从XML 文件读取配置元数据并用它去创立一个齐全配置的零碎或利用。
7. 解释AOP模块
AOP模块用于给咱们的Spring利用做面向切面的开发, 很多反对由AOP联盟提供,这样就确保了Spring和其余AOP框架的共通性。这个模块将元数据编程引入Spring。
8. 解释JDBC形象和DAO模块。
通过应用JDBC形象和DAO模块,保障数据库代码的简洁,并能防止数据库资源谬误敞开导致的问题,它在各种不同的数据库的错误信息之上,提供了一个对立的异样拜访层。它还利用Spring的AOP 模块给Spring利用中的对象提供事务管理服务。
9. 解释对象/关系映射集成模块。
Spring 通过提供ORM模块,反对咱们在间接JDBC之上应用一个对象/关系映射映射(ORM)工具,Spring 反对集成支流的ORM框 架,如Hiberate,JDO和 iBATIS SQL Maps。Spring的事务管理同样反对以上所有ORM框架及JDBC。
10. 解释WEB 模块。
Spring的WEB模块是构建在application context 模块根底之上,提供一个适宜web利用的上下文。这个模块也包含反对多 种面向web的工作,如通明地解决多个文件上传申请和程序级申请参数的绑定到你的业务对象。它也有对Jakarta Struts的反对。
12. Spring配置文件
Spring配置文件是个XML 文件,这个文件蕴含了类信息,形容了如何配置它们,以及如何互相调用。
13. 什么是Spring IOC 容器?
Spring IOC 负责创建对象,治理对象(通过依赖注入(DI),拆卸对象,配置对象,并且治理这些对象的整个生命周期。
14. IOC的长处是什么?
IOC 或 依赖注入把利用的代码量降到最低。它使利用容易测试,单元测试不再须要单例和JNDI查找机制。最小的代价和最小的侵入性使涣散耦合得以实现。IOC容器反对加载服务时的饿汉式初始化和懒加载。
15. ApplicationContext通常的实现是什么?
FileSystemXmlApplicationContext :此容器从一个XML文件中加载beans的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。
ClassPathXmlApplicationContext:此容器也从一个XML文件中加载beans的定义,这里,你须要正确设置classpath因为这个容器将在classpath里找bean配置。
WebXmlApplicationContext:此容器加载一个XML文件,此文件定义了一个WEB利用的所有bean。
16. Bean 工厂和 Application contexts 有什么区别?
BeanFactory是Spring外面最底层的接口,是Ioc的外围,定义了Ioc的基本功能,蕴含了各种Bean的定义、加载、实例化,依赖注入和生命周期治理。
ApplicationContext接口作为BeanFactory的子类,除了提供BeanFactory所具备的性能外,还提供了更残缺的框架性能:
①继承MessageSource,因而反对国际化
②资源文件拜访,如URL和文件(ResourceLoader)
③载入多个(有继承关系)上下文(及同时加载多个配置文件),使得每一个上下文都专一于一个特定的档次
④提供在监听器中注册bean的事件;
二者区别
1.BeanFactroy采纳的是提早加载模式来注入Bean的,即只有在应用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样,咱们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相同,它是在容器启动时,一次性创立了所有的Bean。这样,在容器启动时,咱们就能够发现Spring中存在的配置谬误。 绝对于根本的BeanFactory,ApplicationContext 惟一的有余是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。
BeanFacotry提早加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次应用调用getBean办法才会抛出异样;而ApplicationContext则在初始化本身是测验,这样有利于查看所依赖属性是否注入;所以通常状况下咱们抉择应用 ApplicationContext。利用上下文则会在上下文启动后预载入所有的单实例Bean。通过预载入单实例bean ,确保当你须要的时候,你就不必期待,因为它们曾经创立好了。
2.BeanFactory和ApplicationContext都反对BeanPostProcessor、BeanFactoryPostProcessor的应用,但两者之间的区别是:BeanFactory须要手动注册,而ApplicationContext则是主动注册。(Applicationcontext比 beanFactory 退出了一些更好应用的性能。而且 beanFactory 的许多性能须要通过编程实现而 Applicationcontext 能够通过配置实现。比方后处理 bean , Applicationcontext 间接配置在配置文件即可而 beanFactory 这要在代码中显示的写进去才能够被容器辨认。 )
3.beanFactory次要是面对与 spring 框架的基础设施,面对 spring 本人。而 Applicationcontex 次要面对与 spring 应用的开发者。根本都会应用 Applicationcontex 并非 beanFactory
17. 一个Spring的利用看起来象什么?
· 一个定义了一些性能的接口。
· 这实现包含属性,它的Setter , getter 办法和函数等。
· Spring AOP。
· Spring 的XML 配置文件。
· 应用以上性能的客户端程序。
18. 什么是Spring的依赖注入?
依赖注入,是IOC的一个方面,是个通常的概念,它有多种解释。这概念是说你不必创建对象,而只须要形容它如何被创立。你不在代码里间接组装你的组件和服务,然而要在配置文件里形容哪些组件须要哪些服务,之后一个容器(IOC容器)负责把他们组装起来。
19. 有哪些不同类型的IOC(依赖注入)形式?
结构器依赖注入:结构器依赖注入通过容器触发一个类的结构器来实现的,该类有一系列参数,每个参数代表一个对其余类的依赖。
Setter办法注入:Setter办法注入是容器通过调用无参结构器或无参static工厂 办法实例化bean之后,调用该bean的setter办法,即实现了基于setter的依赖注入。
注解注入
20. 哪种依赖注入形式你倡议应用,结构器注入,还是 Setter办法注入?
你两种依赖形式都能够应用,结构器注入和Setter办法注入。最好的解决方案是用结构器参数实现强制依赖,setter办法实现可选依赖。
21.什么是Spring beans?
Spring beans 是那些造成Spring利用的骨干的java对象。它们被Spring IOC容器初始化,拆卸,和治理。这些beans通过容器中配置的元数据创立。比方,以XML文件中<bean/> 的模式定义。
Spring 框架定义的beans都是单件beans。在bean tag中有个属性”singleton”,如果它被赋为 TRUE,bean 就是单件,否则就是一个 prototype bean。默认是TRUE,所以所有在Spring框架中的beans 缺省都是单 件。
22. 一个 Spring Bean 定义 蕴含什么?
一个Spring Bean 的定义蕴含容器必知的所有配置元数据,包含如何创立一个bean,它的生命周期详情及它的依赖。
23. 如何给Spring 容器提供配置元数据?
这里有三种重要的办法给Spring 容器提供配置元数据。
· XML配置文件。
· 基于注解的配置。
· 基于java的配置。
24. 你怎么定义类的作用域?
当定义一个<bean> 在Spring里,咱们还能给这个bean申明一个作用域。它能够通过bean 定义中的scope属性来定 义。如,当Spring要在须要的时候每次生产一个新的bean实例,bean的scope属性被指定为prototype。另一方面,一个bean每次 应用的时候必须返回同一个实例,这个bean的scope 属性 必须设为 singleton。
25. 解释Spring反对的几种bean的作用域。
Spring框架反对以下五种bean的作用域:
· singleton : bean在每个Spring ioc 容器中只有一个实例。
· prototype:一个bean的定义能够有多个实例。
· request:每次http申请都会创立一个bean,该作用域仅在基于web的Spring ApplicationContext情景下无效。
· session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情景下无效。
· global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情景下无效。
缺省的Spring bean 的作用域是Singleton.
26. Spring框架中的单例bean是线程平安的吗?
不,Spring框架中的单例bean不是线程平安的。
27. 解释Spring框架中bean的生命周期。
· Spring容器 从XML 文件中读取bean的定义,并实例化bean。
· Spring依据bean的定义填充所有的属性。
· 如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName办法。
· 如果Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 办法。
· 如果有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()办法内调用它们。
· 如果bean实现IntializingBean了,调用它的afterPropertySet办法.
· 如果bean申明了初始化办法,调用此初始化办法。
· 如果有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 办法将被调用。
· 如果bean实现了 DisposableBean,它将调用destroy()办法。
28. 哪些是重要的bean生命周期办法? 你能重载它们吗?
有两个重要的bean 生命周期办法,第一个是setup , 它是在容器加载bean的时候被调用。第二个办法是 teardown 它是在容器卸载类的时候被调用。
The bean 标签有两个重要的属性(init-method和destroy-method)。用它们你能够本人定制初始化和登记办法。它们也有相应的注解(@PostConstruct和@PreDestroy)。
29. 什么是Spring的外部bean?
当一个bean仅被用作另一个bean的属性时,它能被申明为一个外部bean,为了定义inner bean,在Spring 的 基于XML 的 配置元数据中,能够在 <property/>或 <constructor-arg/> 元素内应用<bean /> 元素,外部bean通常是匿名的,它们的Scope个别是prototype。
30. 在 Spring中如何注入一个java汇合?
Spring提供以下几种汇合的配置元素:
· <list>类型用于注入一列值,容许有雷同的值。
· <set> 类型用于注入一组值,不容许有雷同的值。
· <map> 类型用于注入一组键值对,键和值都能够为任意类型。
· <props>类型用于注入一组键值对,键和值都只能为String类型。
31. 什么是bean拆卸?
拆卸,或bean 拆卸是指在Spring 容器中把bean组装到一起,前提是容器须要晓得bean的依赖关系,如何通过依赖注入来把它们拆卸到一起。
32. 什么是bean的主动拆卸?
Spring 容器可能主动拆卸相互合作的bean,这意味着容器不须要<constructor-arg>和<property>配置,能通过Bean工厂主动解决bean之间的合作。
33. 解释不同形式的主动拆卸 。
有五种主动拆卸的形式,能够用来领导Spring容器用主动拆卸形式来进行依赖注入。
· no:默认的形式是不进行主动拆卸,通过显式设置ref 属性来进行拆卸。
· byName:通过参数名 主动拆卸,Spring容器在配置文件中发现bean的autowire属性被设置成byname,之后容器试图匹配、拆卸和该bean的属性具备雷同名字的bean。
· byType::通过参数类型主动拆卸,Spring容器在配置文件中发现bean的autowire属性被设置成byType,之后容器试图匹配、拆卸和该bean的属性具备雷同类型的bean。如果有多个bean符合条件,则抛出谬误。
· constructor:这个形式相似于byType, 然而要提供给结构器参数,如果没有确定的带参数的结构器参数类型,将会抛出异样。
· autodetect:首先尝试应用constructor来主动拆卸,如果无奈工作,则应用byType形式。
34.主动拆卸有哪些局限性 ?
主动拆卸的局限性是:
· 重写: 你仍需用 <constructor-arg>和 <property> 配置来定义依赖,意味着总要重写主动拆卸。
· 根本数据类型:你不能主动拆卸简略的属性,如根本数据类型,String字符串,和类。
· 含糊个性:主动拆卸不如显式拆卸准确,如果有可能,倡议应用显式拆卸。
35. 你能够在Spring中注入一个null 和一个空字符串吗?
能够。
36. 什么是基于Java的Spring注解配置? 给一些注解的例子.
基于Java的配置,容许你在大量的Java注解的帮忙下,进行你的大部分Spring配置而非通过XML文件。
以@Configuration 注解为例,它用来标记类能够当做一个bean的定义,被Spring IOC容器应用。另一个例子是@Bean注解,它示意此办法将要返回一个对象,作为一个bean注册进Spring利用上下文。
37. 什么是基于注解的容器配置?
绝对于XML文件,注解型的配置依赖于通过字节码元数据拆卸组件,而非尖括号的申明。
开发者通过在相应的类,办法或属性上应用注解的形式,间接组件类中进行配置,而不是应用xml表述bean的拆卸关系。
38. 怎么开启注解拆卸?
注解拆卸在默认状况下是不开启的,为了应用注解拆卸,咱们必须在Spring配置文件中配置 <context:annotation-config/>元素。
39. @Required 注解
这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过主动拆卸,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationException。
40. @Autowired 注解
@Autowired 注解提供了更细粒度的管制,包含在何处以及如何实现主动拆卸。它的用法和@Required一样,润饰setter办法、结构器、属性或者具备任意名称和/或多个参数的PN办法。
41. @Qualifier 注解
当有多个雷同类型的bean却只有一个须要主动拆卸时,将@Qualifier 注解和@Autowire 注解联合应用以打消这种混同,指定须要拆卸的确切的bean。
42.在Spring框架中如何更无效地应用JDBC?
应用SpringJDBC 框架,资源管理和错误处理的代价都会被加重。所以开发者只需写statements 和 queries从数据存取数据,JDBC也能够在Spring框架提供的模板类的帮忙下更无效地被应用,这个模板叫JdbcTemplate (例子见这里here)
43. JdbcTemplate
JdbcTemplate 类提供了很多便当的办法解决诸如把数据库数据转变成根本数据类型或对象,执行写好的或可调用的数据库操作语句,提供自定义的数据错误处理。
44. Spring对DAO的反对
Spring对数据拜访对象(DAO)的反对旨在简化它和数据拜访技术如JDBC,Hibernate or JDO 联合应用。这使咱们能够不便切换长久层。编码时也不必放心会捕捉每种技术特有的异样。
45. 应用Spring通过什么形式拜访Hibernate?
在Spring中有两种形式拜访Hibernate:
管制反转 Hibernate Template和 Callback。
继承 HibernateDAOSupport提供一个AOP 拦截器。
46. Spring反对的ORM
Spring反对以下ORM:
Hibernate
iBatis
JPA (Java Persistence API)
TopLink
JDO (Java Data Objects)
OJB
47.如何通过HibernateDaoSupport将Spring和Hibernate联合起来?
用Spring的 SessionFactory 调用 LocalSessionFactory。集成过程分三步:
配置the Hibernate SessionFactory。
继承HibernateDaoSupport实现一个DAO。
在AOP反对的事务中拆卸。
48. Spring反对的事务管理类型
Spring反对两种类型的事务管理:
· 编程式事务管理:这象征你通过编程的形式治理事务,给你带来极大的灵活性,然而难保护。
· 申明式事务管理:这意味着你能够将业务代码和事务管理拆散,你只需用注解和XML配置来治理事务。
49. Spring框架的事务管理有哪些长处?
· 它为不同的事务API 如 JTA,JDBC,Hibernate,JPA 和JDO,提供一个不变的编程模式。
· 它为编程式事务管理提供了一套简略的API而不是一些简单的事务API如
· 它反对申明式事务管理。
· 它和Spring各种数据拜访形象层很好得集成。
50. 你更偏向用那种事务管理类型?
大多数Spring框架的用户抉择申明式事务管理,因为它对利用代码的影响最小,因而更合乎一个无侵入的轻量级容器的思维。申明式事务管理要优于编程式事务管理,尽管比编程式事务管理(这种形式容许你通过代码管制事务)少了一点灵活性。
51. 解释AOP
面向切面的编程,或AOP, 是一种编程技术,容许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。
52. Aspect 切面
AOP外围就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组API提供横切性能。比方,一个日志模块能够被称作日志的AOP切面。依据需要的不同,一个应用程序能够有若干切面。在Spring AOP中,切面通过带有@Aspect注解的类实现。
53. 在Spring AOP 中,关注点和横切关注的区别是什么?
关注点是利用中一个模块的行为,一个关注点可能会被定义成一个咱们想实现的一个性能。
横切关注点是一个关注点,此关注点是整个利用都会应用的性能,并影响整个利用,比方日志,平安和数据传输,简直利用的每个模块都须要的性能。因而这些都属于横切关注点。
54. 连接点
连接点代表一个应用程序的某个地位,在这个地位咱们能够插入一个AOP切面,它实际上是个应用程序执行Spring AOP的地位。
55. 告诉
告诉是个在办法执行前或执行后要做的动作,实际上是程序执行时要通过SpringAOP框架触发的代码段。
Spring切面能够利用五种类型的告诉:
· before:前置告诉,在一个办法执行前被调用。
· after: 在办法执行之后调用的告诉,无论办法执行是否胜利。
· after-returning: 仅当办法胜利实现后执行的告诉。
· after-throwing: 在办法抛出异样退出时执行的告诉。
· around: 在办法执行之前和之后调用的告诉。
56. 切点
切入点是一个或一组连接点,告诉将在这些地位执行。能够通过表达式或匹配的形式指明切入点。
57. 什么是引入?
引入容许咱们在已存在的类中减少新的办法和属性。
58. 什么是指标对象?
被一个或者多个切面所告诉的对象。它通常是一个代理对象。也指被告诉(advised)对象。
59. 什么是代理?
代理是告诉指标对象后创立的对象。从客户端的角度看,代理对象和指标对象是一样的。
60. 有几种不同类型的主动代理?
· BeanNameAutoProxyCreator
· DefaultAdvisorAutoProxyCreator
· Metadata autoproxying
61. 什么是织入。什么是织入利用的不同点?
织入是将切面和到其余利用类型或对象连接或创立一个被告诉对象的过程。
织入能够在编译时,加载时,或运行时实现。
62. 解释基于XML Schema形式的切面实现。
在这种状况下,切面由惯例类以及基于XML的配置实现。
63. 解释基于注解的切面实现
在这种状况下(基于@AspectJ的实现),波及到的切面申明的格调与带有java5标注的一般java类统一。
64. 什么是Spring的MVC框架?
Spring 装备构建Web 利用的全功能MVC框架。Spring能够很便捷地和其余MVC框架集成,如Struts,Spring 的MVC框架用管制反转把业务对象和管制逻辑清晰地隔离。它也容许以申明的形式把申请参数和业务对象绑定。
65. DispatcherServlet
Spring的MVC框架是围绕DispatcherServlet来设计的,它用来解决所有的HTTP申请和响应。
66. WebApplicationContext
WebApplicationContext 继承了ApplicationContext 并减少了一些WEB利用必备的特有性能,它不同于个别的ApplicationContext ,因为它能解决主题,并找到被关联的servlet。
67. 什么是Spring MVC框架的控制器?
控制器提供一个拜访应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输出并将其转换为一个由视图出现给用户的模型。Spring用一个十分形象的形式实现了一个管制层,容许用户创立多种用处的控制器。
68. @Controller 注解
该注解表明该类表演控制器的角色,Spring不须要你继承任何其余控制器基类或援用Servlet API。
69. @RequestMapping 注解
该注解是用来映射一个URL到一个类或一个特定的方解决法上。
70.Spring工作机制及为什么要用?
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创立的。Spring既是一个AOP框架,也是一IOC容器。
SpringFramework的组成:Spring AOP,Spring DAO,Spring ORM,Spring Web,Spring Context, Spring Web MVC。
Spring的外围就是IOC和AOP,所以Spring的工作机制简略的了解也就是IOC和AOP的工作机制。
借助于Spring AOP,Spring IoC可能很不便的应用到十分强壮、灵便的企业级服务,通过应用IoC可能升高组件之间的耦合度,最终,可能进步类的重用性,利于测试,而且更利于整个产品或系统集成和配置。
71.说说AOP和IOC的概念以及在spring中是如何利用的?
· AOP,Aspect Oriented Program,面向(方面)切面的编程;
· IOC,Invert Of Control,管制反转。
IOC就是其实就是依赖注入,即用接口编程,在程序中不呈现new关键字,而是用接口来命名援用,而后通过某种形式把接口的某个实现类的实例注入到援用里,从而实现接口与具体实现类的松耦合。
由容器控制程序之间的关系(通过XML配置),而非传统实现中的由程序代码间接操控,(在一个Class对象中援用另一个Class对象时,咱们通常都是间接通过new contructor)。控制权由利用代码直达到了内部容器,控制权的转移,是所谓的反转。
AOP形式很相似filter,就是在程序失常的业务流两头像切面一样插入很多其余须要执行的代码,比方登录时候,在进入登录页背后写入日志,很罕用的,尤其是跟数据库无关的,或者跟领取无关的程序必定会在每一步后面插入日志。
面向方面的编程,即 AOP,是一种编程技术,它容许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的外围结构是切面,它将那些影响多个类的行为封装到可重用的模块中。
AOP Advice(AOP告诉)分为:
· 前置告诉
· 后置告诉
· 异样告诉
· 盘绕告诉
72. Spring的事务有几种形式?
申明式事务:
应用spring申明式事务,spring应用AOP来反对申明式事务,会依据事务属性,主动在办法调用之前决定是否开启一个事务,并在办法执行之后决定事务提交或回滚事务。
编程式事务管理:
Spring的编程式事务与申明式事务区别
程式事务须要你在代码中间接退出解决事 务的逻辑,可能须要在代码中显式调用beginTransaction()、commit()、rollback()等事务管理相干的办法,如在执行a方 法时候须要事务处理,你须要在a办法开始时候开启事务,解决完后。在办法完结时候,敞开事务.
申明式的事务的做法是在a办法外围增加注解或者间接在配置文件中定义,a办法须要事务处理,在spring中会通过配置文件在a办法前后拦挡,并增加事务.
二者区别:
编程式事务侵入性比拟强,但解决粒度更细.
73. 谈谈spring事务的隔离级别和流传行为?
事务的隔离级别:
数据库系统提供了4种事务隔离级别,在这4种隔离级别中,Serializable的隔离级别最高,Read Uncommitted的隔离级别最低;
· Read Uncommitted 读未提交数据;(会呈现脏读)
· Read Committed 读已提交数据;
· Repeatable Read 可反复读;
· Serializable 串行化
事务的流传属性:
· Required 业务办法须要在一个事务中运行,如果一个办法运行时曾经处在一个事务中,那么退出到该事务,否则为本人创立一个新事务,80%的办法用到该流传属性;
· Not-Supported· Requiresnew· Mandatoky· Supports· Never· Nested
事务的流传机制:
流传机制 | 阐明 |
---|---|
PROPAGATION_REQUIRED | 如果以后没有事务,就创立一个事务,如果曾经存在事务,就退出到这个事务。以后流传机制也是spring默认流传机制 |
PROPAGATION_REQUIRES_NEW | 新建事务,如果以后存在事务,就抛出异样 |
PROPAGATION_SUPPORTS | 反对以后事务,如果以后没有事务,就以非事务形式执行 |
PROPAGATION_NOT_SUPPORTED | 以非事务形式执行操作,如果以后存在事务,就把以后事务挂起 |
PROPAGATION_MANDATORY | 应用以后的事务,如果以后没有事务,就抛出异样 |
PROPAGATION_NEVER | 以非事务形式执行,如果以后存在事务,则抛出异样 |
PROPAGATION_NESTED | 如果以后存在事务,则在嵌套的事务内执行。如果以后没有事务,则执行与PROPAGATION_REQUIRED相似的操作 |
74. Spring的长处和毛病?
⑴Spring的长处:
① Spring能无效地组织你的中间层对象,不论你是否抉择应用了EJB;
② Spring能打消在许多工程中常见的对Singleton的过多应用。(因为它升高了零碎的可测试性和面向对象的水平);
③ 通过一种在不同应用程序和我的项目间统一的办法来解决配置文件,Spring能打消各种各样自定义格局的属性文件的须要。Inversion of Control的应用帮忙实现了这种简化;
④通过把对接口编程而不是对类编程的代价简直缩小到没有,Spring可能促成养成好的编程习惯;
⑤Spring被设计为让应用它创立的利用尽可能少的依赖于他的APIs。在Spring利用中的大多数业务对象没有依赖于Spring;
⑥应用Spring构建的应用程序易于单元测试;
⑦Spring能使EJB的应用成为一个实现抉择,而不是利用架构的必然选择。你能抉择用POJOs或local EJBs来实现业务接口,却不会影响调用代码;
⑧Spring帮忙你解决许多问题而无需应用EJB。Spring能提供一种EJB的替换物,他们实用于许多web利用。例如:Spring能应用AOP提供申明性事务管理而不通过EJB容器;
⑨Spring为数据存取提供了一个统一的框架不管应用的是JDBC还是O/R mapping产品;
⑵Spring的毛病:
①应用人数不多,jsp中要写很多代码;(已过期)
②控制器过于灵便,短少一个专用控制器。
转自:http://blog.163.com/menxu_wor…
https://blog.csdn.net/zl1zl2z…