笔记--Spring in action
第一部分 Spring 的核心
Spring 的主要特性是依赖注入(DI)和面向切面编程(AOP)
第一章 开始Spring 之旅
javabeans 为JAVA定义了软件组件模型。这个规范规定了一系列的编码规范,这使简单的java对象可以被重用,并且很容易就组成比较复杂的应用。
但复杂的应用往往是一些服务,如事物支持、安全、分布计算等,这些服务是javabeans 无法直接提供的。
目前,EJB已经能够提供基于POJO(plain old java object)的编程模型,其利用了像DI和AOP那样的思想,使得最新的EJB规范要比前者简化很多。负责轻量级POJO 开发就是spring 框架。
1.1
Spring是一个轻量级的DI和AOP 容器框架:
轻量级
依赖注入(DI)对象是被动接收依赖类而不是自己主动去找:对象不是从容器中查找它的依赖类,而是容器在事例化对象的时候主动将它的依赖类注入给它
面向切面:通过将业务逻辑从应用服务(如监控和事物管理)中分离出来,实现了内聚开发。应用对象只做——业务逻辑,它们不负责系统问题(如日志和事物支持)
容器——因为它包含并且管理应用对象的生命周期和配置。
框架:实现了使用简单的组件配置组合成一个复杂的应用。应用对象是通过xml 文件配置组合起来的。
Spring 模块
由7个模块组成。
1)核心容器:规定如何创建、配置和管理Bean以及很多Spring的具体细节。找到BeanFactory 类,它是最基本的spring容器和spring 的di 所依赖的基础。
2)Application Context模块
使Spring成为框架,提供了很多企业级服务,如电子邮件服务,JNDI 访问,EJB集成,远程调用以及定时服务,并且支持与模板框架的集成。
3)AOP模块
为了Spring 应用开发切面的基础,与DI 一样,AOP支持应用对象之间的松耦合
4)JDBC抽象及DAO模块
让数据库代码简单明了;还建立了一个容易理解的数据库异常层。
5)ORM(object-relational mapping)映射集成模块
建立在DAO的支持之上,并可以方便地构建适合几个ORM解决方案的DAO.Spring 不想实现自己的ORM解决方案,但是它为许多流行的ORM 框架做了钩子程序,包括Hibernate,java persistence API,JDO和iBATIS SQL映射。
6)java 管理扩展(JMX)
如何方便地展现java应用的内在工作流程以便于管理。
7)java EE连接器API(JCA)
8)MVC框架
9)Portlet MVC
10) WEB 模块
11)远程调用
12)消息服务(JMS)
1.2开始Spring之旅
依赖注入(DI)是Spring所做的基本的事情。
<beans>是任何Spring配置文件的根元素。<bean>元素用来在Spring容器中定义一个类以及它的配置信息。
1) <bean id="greetingService" class="...">
<property name="greeting" value="ciao"/>
</bean>
spring 会通过setGreeting()方法来设置其属性值。
2)
<bean id="greetingService" class="...">
<constructor-arg value="ciao"/>
</bean>
GreetingServiceImpl greetingService=new GreetingServiceImpl("Ciao");
BeanFactory factory=new XmlBeanFactory(new FileSystemResource("hello.xml"));
GreetingService greetingService=(GreetingService)factory.getBean("greetingService");
第二章 基本bean装配
创建系统组件之间协作关系的这个动作是id的关键,通常被成为装配。
容器是spring框架的核心,spring容器使用di管理所有组成系统的组件,这包括在协作组件之间建立关联。
容器实现,两类:
1)bean工厂
负责创建和分发bean.使用一个filesystemresource 来创建一个xmlbeanfactory,其bean的定义来自文件系统中的xml文件,但这个之后bean工厂还没有事例化bean,只有到bean在被需要的时候才被事例化。为了从beanfactory得到一个bean,只要简单地调用getbean(“name of bean”)
2)使用应用上下文application context
提供了文本信息解析工具
提供了载入文件资源地通用方法
可以向注册为监听器的bean发送事件
bean的生命周期: