spring 概述6 H! c% \0 T( x8 N% u
1. 什么是spring? k8 N3 ^3 N& t
: q' Q" g2 `/ t; Y- d) ZSpring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。! P1 }1 E# \6 U& t& I; @- f
" `% x- O5 v3 I: H2 X% ]( L
2. 使用Spring框架的好处是什么? ! h$ q* s, I* A5 w: p% Z4 q! M! M- K' [, S4 {8 W. o
轻量:Spring 是轻量的,基本的版本大约2MB。 |1 J+ x' K2 F: x" ?' O
控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。; q" [% h+ \7 p# u. a
面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。2 L: y# w6 V9 _; d/ y! p
容器:Spring 包含并管理应用中对象的生命周期和配置。9 \: d6 Z0 `9 k' G
MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。. e, i' T5 d4 m2 M5 ]8 ~! r
事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。 ) O; O: c* @- z: y) F异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,hibernate or JDO抛出的)转化为一致的unchecked 异常。 3 |* g2 |8 K1 K! W+ ~3. Spring由哪些模块组成?9 g3 E: ^1 {" @
/ G/ R$ H% @' y* t
以下是Spring 框架的基本模块: 1 ~, r! {& X0 H3 U9 D: t 3 A/ V: O& |2 {8 o' t2 ACore module " Y3 m+ j) B! ~Bean module6 D! S9 H( w3 h9 H' Y
Context module" v" T" Z f) T5 b) g* j
Expression Language module, u, ? w8 Q$ x0 `4 g
JDBC module4 t' g$ g% Z: a3 [& W9 ^- l
ORM module# a: n6 F9 Q" U6 F7 m+ o/ D
OXM module; o. Q# z9 Y* ]0 s+ T
Java Messaging Service(JMS) module 2 n6 u4 d4 z/ m9 K vTransaction module 8 h/ ]) h, ?, h% mWeb module; G* B) N5 s% M
Web-Servlet module + J. Y4 @9 ]- Z ^4 GWeb-struts module 7 @* r8 A9 b% I5 Z( ^Web-Portlet module, Z/ G v5 h/ D
4. 核心容器(应用上下文) 模块。. R3 r& Q9 B0 S5 |% z- H$ \& `. z) \. C
/ [3 z% w5 p/ t+ B+ r% e
这是基本的Spring模块,提供spring 框架的基础功能,BeanFactory 是 任何以spring为基础的应用的核心。Spring 框架建立在此模块之上,它使Spring成为一个容器。 % Y1 z1 _4 s# i$ ], D8 _4 U! R . K) O& t: i7 Y3 _0 n! K5. BeanFactory – BeanFactory 实现举例。 " F V* G* F5 n8 r, Y3 H4 j4 H* a5 p4 x& V3 d4 Z# j
Bean 工厂是工厂模式的一个实现,提供了控制反转功能,用来把应用的配置和依赖从正真的应用代码中分离。3 N0 O% v- q: G2 m, \
+ v* [ t6 O' w) n7 F& @最常用的BeanFactory 实现是XmlBeanFactory 类。; q4 T( V# L; V" i* O) H& ~
7 O: h( O r% o1 Z5 c B
6. XMLBeanFactory % o" b$ `4 E' H' g3 T- k% o9 c* e# S6 ^; O
最常用的就是org.springframework.beans.factory.xml.XmlBeanFactory ,它根据XML文件中的定义加载beans。该容器从XML 文件读取配置元数据并用它去创建一个完全配置的系统或应用。) V) x" c: k5 r6 x
4 [8 a. C8 y( W5 V( M7. 解释AOP模块 8 o: s: o1 t6 e& e1 u2 X7 \& h- R ?- S" D8 v* [% RAOP模块用于发给我们的Spring应用做面向切面的开发, 很多支持由AOP联盟提供,这样就确保了Spring和其他AOP框架的共通性。这个模块将元数据编程引入Spring。 % }* \, t" h' f( r8 N2 S$ K9 p+ G( I* X/ H2 B+ L$ w
8. 解释JDBC抽象和DAO模块。/ L$ ~% c2 h2 D% i
. {# h7 q2 e: T
通过使用JDBC抽象和DAO模块,保证数据库代码的简洁,并能避免数据库资源错误关闭导致的问题,它在各种不同的数据库的错误信息之上,提供了一个统一的异常访问层。它还利用Spring的AOP 模块给Spring应用中的对象提供事务管理服务。5 ~/ C( ~8 Z8 M1 Y& t
% v( E7 [; j6 S L9 D8 Y* s9. 解释对象/关系映射集成模块。+ \2 S0 h0 S0 W+ l% j. {" @
" y; j% R9 w! N7 f; R( Q
Spring 通过提供ORM模块,支持我们在直接JDBC之上使用一个对象/关系映射映射(ORM)工具,Spring 支持集成主流的ORM框架,如Hiberate,JDO和 iBATIS SQL Maps。Spring的事务管理同样支持以上所有ORM框架及JDBC。0 X: r, o* p( y: w+ \3 @
: Y; z+ C0 ~0 X# i4 P7 a0 C. y2 g/ \
10. 解释WEB 模块。 3 T8 B5 r: V% t+ g' a / h! @ w' Z/ b" g9 |Spring的WEB模块是构建在application context 模块基础之上,提供一个适合web应用的上下文。这个模块也包括支持多种面向web的任务,如透明地处理多个文件上传请求和程序级请求参数的绑定到你的业务对象。它也有对Jakarta Struts的支持。 1 j2 g% Z. i, S+ |( Q; F. d% {0 [, w 8 s* ~: p7 l3 E' v6 _+ R) b12. Spring配置文件 , ~$ a! M3 P. k- X" I " h+ [8 u+ }2 v. R# T# p) W1 mSpring配置文件是个XML 文件,这个文件包含了类信息,描述了如何配置它们,以及如何相互调用。0 d" T; e* c6 M; z
. X; _0 x$ a F- ?
13. 什么是Spring IOC 容器?3 E9 e$ \8 ~ A, R
( M4 ~) G" a" Z: u; CSpring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。' g3 w$ V- X( d+ f
2 i. F' O. m# J! [
14. IOC的优点是什么?) c: ], R8 u, Z# \* l& j+ s
2 n0 P2 i! w1 r3 C* b8 E. q39. @Required 注解 # n0 b$ X6 @1 Y ' E# }4 ]" c; C# ]; j; z这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationException。 0 a Q1 C7 D. u, w2 V1 l4 b - z4 l- K; H% e5 C* ~/ Z40. @Autowired 注解 6 Y" ^4 R# Z; @5 c, A, ? : W! i- ?' P: E9 W9 ^5 h3 o& T@Autowired 注解提供了更细粒度的控制,包括在何处以及如何完成自动装配。它的用法和@Required一样,修饰setter方法、构造器、属性或者具有任意名称和/或多个参数的PN方法。 . P. I& J/ t6 V9 r5 q' g5 g7 i2 h$ F8 d! g% F* M6 g" }% O
41. @Qualifier 注解 ; D( I+ x4 W6 S3 n) e w* E0 t" A
当有多个相同类型的bean却只有一个需要自动装配时,将@Qualifier 注解和@Autowire 注解结合使用以消除这种混淆,指定需要装配的确切的bean。 , B6 n6 A& _' w( q9 T: h+ C" O2 R/ |5 n: L( t- b
Spring数据访问# D: |8 A& ~1 I$ x5 w: ~8 X
42.在Spring框架中如何更有效地使用JDBC? " O6 p# e: |2 \8 E, @8 ^/ n$ s, |; \: K0 s( K* ~, ]- S
使用SpringJDBC 框架,资源管理和错误处理的代价都会被减轻。所以开发者只需写statements 和 queries从数据存取数据,JDBC也可以在Spring框架提供的模板类的帮助下更有效地被使用,这个模板叫JdbcTemplate (例子见这里here) $ N, a- V+ h) P$ E4 H6 ]5 c$ Y! c* v Z6 ]2 |
43. JdbcTemplate' I& q2 P6 @6 T# ^
|8 P- s. x) j- u" V. b: S: X
JdbcTemplate 类提供了很多便利的方法解决诸如把数据库数据转变成基本数据类型或对象,执行写好的或可调用的数据库操作语句,提供自定义的数据错误处理。% B2 a1 D" O. [5 k# C
2 B. `% J/ e i) w7 D+ P! j44. Spring对DAO的支持) T2 Z9 {( b& X
: P# y. y% e/ t7 J7 j
Spring对数据访问对象(DAO)的支持旨在简化它和数据访问技术如JDBC,Hibernate or JDO 结合使用。这使我们可以方便切换持久层。编码时也不用担心会捕获每种技术特有的异常。8 ^: T3 u# Z" h
" Y, _+ X# f5 ]1 _* P
45. 使用Spring通过什么方式访问Hibernate?& Y6 J1 |. X9 c& a