1. Spring框架提供了“依赖注入”的模式,可在运行期将组件之间的依赖关系由Spring容器注入组件,因此可以将各应用组件以松耦合的方式组织在一起,
增加了系统的灵活性和可扩展性。同时,spring还提供了面向切面开发以及事物管理的组件,对web层以及持久层也有很好的支持。
2. Spring的7个模块:
Core模块:包含核心容器和支持工具,为Spring框架提供了基本功能,成为其他几个模块的基础功能模块。存在BeanFactory类,这个类是Spring框架的
核心,实现了依赖注入,实现了对系统中的对象进行生命周期管理。
Context模块:这个模块使Spring成为了框架,因为这个模块通过配置文件将各个组件组合在一起,提供了很多企业级的服务,如电子邮件,JNDI访问,
远程调用等内容。
DAO模块:这个模块把JDBC代码中的一些内容抽象出来,简化了JDBC编码。
ORM模块:此模块提供了“对象/关系”映射框架的支持,使得这些框架可以插入到Spring框架中,从而扩展了Spring框架的功能。
AOP模块:此模块提供了面向切面编程的能力,通过AOP模块,可以将通用的功能插入到业务逻辑中,这些功能包括事务管理、安全管理。
Web模块:此模块提供了Web应用所需的上下文,可与Struts等框架结合在一起使用。
Web MVC模块:此模块实现了面向Web应用的MVC模式。模块利用依赖注入将控制部分和业务逻辑进行了清晰的分离。
3. 依赖注入和控制反转表达了同一个概念,那就是把组件之间的依赖关系通过Spring容器来管理和注入。其中,组件之间的关系主要是指调用者和被
调用者之间的关系。
4. 传统的编程方式中,组件之间的依赖关系通过硬编码的方式实现,看起来不直观,维护起来也不方便。组件之间的关系在编译阶段被指定,可以
使用“反射”机制,将依赖关系在运行期指定。
5. Spring框架下,组件之间的依赖关系通过一个配置文件:applicationContext.xml来定义,依赖关系在运行期被注入,使面向接口的编程更简单。
6. Spring框架具有如下优点:配置的时候轻松实现单例类,增加属性singleton,值设为true,组件可以轻松地移植到其他框架下,而不需要改变。
7. 在web.xml中配置WebApplicationContext,自动加载applicationContext.xml文件。
8. Spring管理容器可以是BeanFactory,也可以是ApplicationContext,无论是哪种管理容器,都需要加载配置文件applicationContext.xml,
包含了多个Bean的定义。
9. Spring中的Bean和JavaBean并不完全相同,构造函数可以包含参数,Bean可以是任意Java对象。
10. 在xml文件中配置Bean的参数和属性。
11. Bean的属性配置包括:一般类型,使用value;其他bean引用,使用ref;集合数组,使用list,set,map,property等。
12. Spring的依赖注入方式:设值注入和构造函数注入。
设值注入:依靠property元素在配置文件中,对属性设值。
构造函数注入:通过constructor-arg元素在配置文件中,对属性设值。
13. 设值注入的特点:
(1)若构造函数的参数列表过长,Bean的依赖、继承关系过于复杂,则采用设值注入较为简单。
(2)如果第三方类库需要一个默认的构造函数,则需采用设值注入。
(3)设值注入比较符合一些程序员的习惯,使用get/set方法。
14. 构造函数注入方式的特点:
(1)一次性将依赖关系全部注入,代码简洁
(2)一次性将依赖关系全部注入,Bean可以立即被实例化,立即可用
(3)一次性将依赖关系全部注入,组件被创建后处于较为“稳定”状态,不需担心上层代码依赖关系的破坏。
(4)注入时顺序可以固定,因此对于要求依赖顺序的应用来说比较合适。
15. 使用BeanFactory或ApplicationContext对Bean进行实例化。
16. AOP(Aspect Oriented Programming):对义务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提供
可重用性,和开发效率。
17. AOP采用的方式就是将这些通用的功能或后加的功能从业务逻辑中分离出来,单独地对这些功能模块进行编译,然后在需要的地方
注入这些功能模块。这些通用的功能或后加的功能独立于业务逻辑,属于应用中的一个层次或阶段,被形象地称为切面,注入这些
功能的地方,称为连接点,这些连接点可以是方法的调用,也可以是异常的抛出,多个连接点集合叫做切点。
18. AOP的特点:将应用按阶段进行分割,源代码无关性。
19. AOP实现原理:静态Proxy,动态Proxy,CGLIB模式,Spring AOP
20. 事务管理是数据库编程应用中的一个重要内容,事务是一组原子操作组成的一个工作单元,一个事务中的几个操作要么全做,要么
全不做。如果某个操作出现了问题,则已经完成的操作和产生的结果将被清除,如同没有发生过一样。现实中常用的事务管理的例
子就是银行转账。
21. 声明式的事务管理是基于Spring的AOP实现的,即通过动态代理,将事务作为一个切面对目标对象起作用,这种方式比较灵活,代
码量比较小。
程序控制的事务管理通过编程来实现事务管理,采用这种方式可以实现比较精细的事务管理,但是这种方式代码量比较大。
22. Spring中的事务管理器:JDBC事务管理器,使用DataSourceTransactionManager类;Hibernate事务管理器,使用
HibernateTransactionManager类实现。
23. Spring框架和Struts框架集成的3种方案:
(1)使用Spring的ActionSupport类集成Struts
修改Struts中的Action,使Struts中的Action继承自Spring中的ActionSupport,这样Action中定义的业务逻辑对象可通过
getBean()方法从Spring应用上下文WebApplicationContext中获得,从而达到了集成的目的。但是这样做得缺点是使Struts
的Action和Spring紧密地耦合在了一起。
(2)使用Spring的Action代理集成Struts
需要建立一个Spring的Action代理,代理Struts的Action,当Struts执行Action时,会执行这个代理。代理会在Spring应用上下文
找到真正的StrutsAction,然后交给这个Action处理,当然,这需要事先在Spring的应用上下文中定义Action。这种方式较为常用,
没有将Struts和Spring的代码耦合在一起,只是在配置文件中把所有的Action的type属性变为了DelegationActionProxy,但是这样
使得Struts配置文件看起来不太直观,不能直接看出是哪个Action在处理用户的请求。
(3)修改Struts控制器(RequestProcessor)来集成Struts
为了更直观地在Struts配置文件中显示出Action对应的处理类,可以将Struts配置文件中的action元素的type属性直接显示为Struts
的Action类,执行的时候还会到Spring的上下文去查找对应的StrutsAction类。修改RequestProcessor。