框架概述:
一、Spring框架的历史
两本书籍:
《Expert One-On-One J2EE Design and Development》
《Expert One on one J2EE Development Without EJB》
框架的七个模块:
1) IOC(控制反转)和DI(依赖注入);
2) 灵活可供选择;
3) Spring Web MVC框架;
4) 提供测试驱动开发模式;
5) 灵活的事物支持,通过AOP支持;
6) 消除各式各样的配置文件;
详见HelloSping工程;
通过ClasspathxmlContext获取Beanfactory,然后通过Beanfactory的getBean方法获取对象实例,进而调用实例的方法。
1. DI(依赖注入):
依赖关系:A->B说明A依赖于B,B的变化会给A带来改变;
new 建立依赖关系是在编程时期建立的,而Spring是在运行时期动态建立的;
DI的方式:
A. Setter(设值注入):
|
B. Constructor(构造器注入):
|
其中的表示在配置文件中查找;
|
2. IOC(控制反转):
由容器决定对象的创建;
符合“好莱坞原则”:Don’t call me, I’ll call you!
DI是IOC的特例。
spring中的bean
一、 JavaBean在Spring中的重要作用
Spring中的一切组件都是有JavaBean构成的,Bean之间通过依赖注入确定关系。在Spring中JavaBean无处不在,主要分为系统提供Bean和自己写的Bean。Spring通过所谓的“容器”来管理Bean,我们可以将这个容器理解为注册表。BeanFactory通过容器(注册表)实例化Bean,并在内存中建立Bean的依赖关系网。
BeanFactory中最重要的方法:
BeanFactory fac=new ClassPathXmlApplicationContext("applicationContext.xml"); hello=(Hello)fac.getBean("hellotest"); |
hellotest为applicationContext.xml中的Bean的id。
|
Bean中常用配置项目:
A. Bean的id:配置Bean的id属性在程序中使用;
B. Bean的class:配置要创建的Bean的类型;
C. Bean的init-method:制定Bean初试化方法。Bean实例化后调用该方法;
D. Bean的destory-method:制定Bean的销毁方法。Bean被销毁后调用该方法。用于释放资源的处理;
E. Bean的scope:代表Bean的声明周期;有四个:singleton、prototype、request、session和global session。后三个是Web系统中的相关配置。
ApplicationContext是BeanFactory接口的一个重要的子接口。它能与Spring更紧密的结合,提供国际化支持、事件化支持等。
Spring提供的几个方法配置ApplicationContext对象:
A. WebApplicationContext:通过Web服务器创建ApplicationContext;
B. ClassPathXMLApplicationContext:配置一个XML ApplicationContext,文件放到类路径(src目录文件)下面;
C. FileSystemXmlApplicationContext:配置XML ApplicationContext,文件放到文件系统路径(工程目录)下面;
WebApplicationContext是基于Web的ApplicationContext对象,通过Web服务器加载。在Web服务器启动时实例化xml的配置文件,然后在内存中建立起Bean的依赖关系。
对于不同的Servlet容器,加载的方法有两种:
A. ContextLoaderListener:Servlet2.3后期版本;
在Web.xml中配置:
|
B. ContextLoaderServlet:Servlet2.3以前早起版本;
在Web.xml中配置:
|
监听器首先检查contextConfigLocation参数,如果它不存在,它将使用/WEB-INF/applicationContext.xml作为默认值。如果已存在,它将使用分隔符(逗号、冒号或空格)将字符串分解成应用上下文位置路径。ContextLoaderServlet同ContextLoaderListener一样使用'contextConfigLocation'参数。
spring 与松散耦合的软件系统
一、 J2EE的分层设计
J2EE的分层设计一般分为四层:表示层、服务层、数据持久层、企业信息系统层;设计原则:高内聚,低耦合。下层为上层提供服务,上层依赖于下层。
企业信息系统层:系统的数据来源层,可以是数据库、数据文件等。
数据持久层:用于访问数据库,采用DAO设计模式。例如Hibernate等框架。
服务层:接受表示层请求,调用服务并进行数据池就成的操作。例如EJB或者JavaBean等。
表示层(Web层):用户与系统交互;用户提交请求,系统接受请求并提交处理。例如Struts等。
危害:牵一发而动全身。
导致紧耦合的原因:
A. 系统没有分层;
B. 层之间没有借口;
C. 层之间采用传统的new方式;
1. 使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑
2. 可以提供众多服务,事务管理,WS等。
3. AOP的很好支持,方便面向切面编程。
4. 对主流的框架提供了很好的集成支持,如Hibernate,Struts2,JPA等
5. Spring DI机制降低了业务对象替换的复杂性。
6. Spring属于低侵入,代码污染极低。
7. Spring的高度可开放性,并不强制依赖于Spring,开发者可以自由选择Spring部分或全部