三、Spring的组成
1)Spring Core:核心容器,BeanFactory提供了组件生命周期的管理,组件的创建,装配,销毁等功能。
2)SpringContext:实现了ApplicationContext接口,Spring的上下文,扩展了核心容器,提供事件处理、国际化等功能。它还提供了一些企业级服务的功能,提供了JNDI,EJB,RMI的支持。
3)Spring Web:扩展了Spring上下文,提供Web应用上下文,对Web开发提供功能上的支持,如请求,表单,异常等。
4)Spring DAO:提供对JDBC的支持,还提供了DAO的支持,提供事务支持 5)Spring ORM:对现有的O/R Mapping封装或支持 6)Spring AOP:提供切面支持
7)Spring Web MVC:全功能MVC框架,作用等同于Struts。
第二章 Spring的IoC
概念、分类、基本装配、复杂装配、组件的生命周期、事件处理
一、IoC的概念
IoC,Inversion of Control,控制反转。 又称作Dependency Injection,依赖注入。 A类要调用B类的方法:
1) A要负责创建B的实类,A要负责AB之间的依赖关系 2) 代码的耦合性高。
对象的协作关系由对象自己负责。对象的依赖关系由对象自身来建立的,这种方式的缺
5
点:代码耦合高,不易维护。
依赖注入:对象之间的依赖关系由容器动态的建立起来。容器要解决两个问题:创建对象并赋值给程序,第一件事:创建依赖关系的双方或多方;第二件事:将依赖关系建立起来。 都由容器来控制,代码耦合度低。
依赖注入:容器通过调用组件的Set方法或者构造器来建立依赖关系
二、IoC的分类
(1) 基于set方法
A IB <|---- B setIB( IB b ) f() (2) 基于构造器方式注入 A( IB b )
(3) 基于接口的方式。实现特定接口的方式,侵入式方案
分别实现特定的接口,容器将二类组装起来。
三、装配介绍
容器依照配置文件,构造实例,并将实例的依赖关系建立起来。
1、Spring容器
Spring容器负责生成、组装、销毁组件,并负责事件处理、国际化等功能。 1)BeanFactory
(2) 获得组件引用的两个方法: getBean( BeanId ); getBean( BeanName );
(3) 实现主要通过配置文件XmlBeanFactory (4) 核心容器,提供了组件的创建装备和销毁
(5) 可以把BeanFactory看成工厂对象,当客户端调用getBean方法时,BeanFactory才会立即实例化这个Bean,采用单例模式实例化的。
(6) 实现类XmlBeanFactory(),要通过个配置文件,通过ClassPathResource< Resource>来找到配置文件,路径WIN中用\\\\,UNIX中用/就可以了。
第一步,会调用Bean的缺省构造器;第二步,装配,装配过程中,可以实例化;
2)applicationContext.xml
对组件,用“bean”元素进行描述。
3)装配的内容
(1) 对基本类型和String的装配
6
2、Spring开发要用到的JAR文件
1) 核心JAR包:dist/spring.jar 2) lib / cglib中的JAR包
3) lib / jakarta-commons中的JAR包
四、基本装配
Resource:interface,用来包装资源
xmlBeanFactory:BeanFactory的一个实现,使用Resource对象来查找配置文件 BeanFactory.gerBean(“BeanId”):取得以参数命名,或者Id等于参数值的一个Bean实例。
BeanFactory(容器)在默认情况下,会采用单例方式返回对象。容器只到调用getBean方法时,才会实例化某个对象。
(1) Spring可以采用XML或者.properties文件作配置 (2) 配置文件(XML)
根元素
BeanId要唯一的,一般和类名相同
ApplicationContext
BeanFactory的子接口
扩展了BeanFactory的功能,提供了更多的功能,主要包括事件的处理,国际化功能。只有应用、资源有限时,才用BeanFactory。一般我们用AppicationContext。
ApplicationContext默认是会在启动时,初始(实例化)所有具有单例要求的Bean的实例。
它的实现主要用ClassPathXmlApplicationContext
ApplicationContext ac = new ClassPathXmlApplicationContext(“ioc2\\\\applicationContext.xml”);、 如果有多个配置文件:
ApplicationContext ac = new ClassPathXmlApplicationContext(
new String[]({“ioc2\\\\applicationContext.xml”},{“ioc2\\\\other.xml”}) )
1、set方式注入
1)注入简单属性(String和8中基本类型)
1’在Bean类中要用Set方法,2’配置文件中配置上
7
id:bean的唯一标识
property中的name值表示类中要有相应的set方法 property 中的value值表示要传进来的值。
对于基本类型,Spring容器会自动作类型转换,以便赋值,不用手工的去转换。
例子代码:
HelloBean内容: package ioc1;
public class HelloBean { private String user; private int salary; public String sayHello(){ return \
}
public void setUser(String user) { this.user = user;
}
public void setSalary(int salary){ this.salary = salary; }
}
applicationContext.xml内容:
xsi:schemaLocation=\http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\
测试类: public class Test { public static void main(String[] args) { Resource rs = new ClassPathResource(\ BeanFactory bf= new XmlBeanFactory(rs);//构造出容器的实例了 HelloBean hb = (HelloBean) bf.getBean(\构造实例,并根据配置文件设置属性 System.out.println(hb.sayHello()); HelloBean hb2 = (HelloBean) bf.getBean(\ System.out.println(hb==hb2);//返回TRUE,使用了单例的模式 } } 8

