一、在JavaSE应用中使用Spring
下载:spring-frameword-3.05.RELEASE-with-docs.zip(Spring框架及文档) + spring-frameword-3.0.5.RELEASE-dependencies.zip(Spring框架编译和运行所依赖的第三方类库)
spring-frameword-3.05.RELEASE-with-docs.zip目录结构:
dist:包含Spring的JAR包;由20个分模块的Jar包组成,不同的Jar包提供不同的功能;一般Core Container对应的Jar包是使用Spring必须的
docs:存放Spring的相关文档,包含开发指南、API参考文档
projects:存放Spring分模块的项目结构,包括项目源代码、Maven的生成文件、Ant+lvy的生成文件
src:包含Spring分模块的项目源代码;每个Jar包包含一个分模块的项目的源代码
其他关于Spring的license和项目相关文件
2.将dist目录下所需模块的JAR包复制到项目CLASSPATH路径下;如需发布该应用,则将这些jar包一同发布即可;若无太多约束,建议复制dist目录下的全部jar包
3.解压spring-frameword-3.0.5.RELEASE-dependencies.zip;该目录下包含了Spring框架编译和运行所依赖的第三方类库,具体需哪些jar文件,取决于应用所用到的项目;通常需增加common-logging等文件夹下的JAR文件
二、在Web应用中使用Spring
将Spring项目的dist路径下全部JAR包复制到Web应用WEB-INF/lib路径下
将Spring的spring-framework-3.0.5.RELEASE-dependencies.zip解压缩路径下所需第三方类库复制到Web应用WEB-INF/lib路径下
三、在Eclipse中开发Spring应用
新建用户库为该项目增加Spring支持
Add Libraries --> User Library
编写主程序,该主程序仅仅初始化Spring容器,Spring容器是Spring应用的核心,该容器负责管理容器中的Java组件 public class SpringTest { public static void main(String[] args) { // 读取配置文件 创建Spring容器 创建Spring中的bean: Spring容器的bean组件是在容器创建和实例化的时候一起创建并初始化的 ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); // ApplicationContext context = new FileSystemXmlApplicationContext( // "beans.xml"); // Resource resource = new ClassPathResource("beans.xml"); // BeanFactory context = new XmlBeanFactory(resource); // 输出Spring容器 System.out.println(context); // 通过Spring容器获取 PersonService p = context.getBean("personService", PersonService.class); p.info(); } } ApplicationContext实例是Spring容器,是Spring的核心,他是一个功能超强的巨大工厂;一旦获得Spring容器,就可通过该容器访问Spring容器中的Bean Spring容器并不强制要求被管理组件是标准JavaBean Spring容器根据配置文件信息,负责创建PersonService实例,并为其设置属性值-----这种由Spring容器为对象设置属性的方式被称为控制反转(Inversion of Control,IoC)
public class PersonService { private String name; // 省略name的setter、getter方法 public void info() { System.out.println("此人名为:" + name); } }
bean.xml: <?xml version="1.0" encoding="UTF-8"?> <!-- Spring配置文件的根元素,使用spring-beans-3.0.xsd语义约束 --> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" default-lazy-init="true”> <!—将PersonService类部署成Spring容器中的Bean --> <bean id="personService" class="com.PersonService" lazy-init="true" scope=”singleton” init-method="myInit" destroy-method="mhyDestroy"> 普通属性注入: <property name="name" value="林炳东" /> 类类型属性注入: <property name=”b1” ref=”bean1” /> </bean> <bean id=”bean1” class=”come.Bean1” /> -------------------------------------------------------------------------------------------------------------- 根标签:defualt-lazy-init=“true“(所有对象延迟创建) bean标签:lazy-init=”true”(延迟创建bean对象;容器创建的时候不创建该对象,当调用getBean方法的时候才创建) -------------------------------------------------------------------------------------------------------------- scope=”singleton”:spring默认创建对象的方式为singleton模式,即用同一个id创建的对象是同一个对象 scope取值: singleton:单例(只有一个对象) prototype:每次调用getBean方法容器创建一个新的bean 仅用于web应用,将对象放置到以下指定作用域中 request: session: global session:相当于application -------------------------------------------------------------------------------------------------------------- init-metod=“对象初始化方法名“:指定对象初始化的时候调用的方法 destroy-method=“对象销毁方法名“:指定对象销毁的时候调用的方法;该属性只有scope=”singleton“的时候才生效 对象是在容器关闭或销毁的时候才销毁 构造方法注入: private A a; private String b; public Main(A a, String b) { this.a = a; this.b = b; } --------------------------------------------------------- - <constructor-arg index="0" ref="a" /> - <constructor-arg index="1" value="abc" /> - </bean> - - <bean id="a" class="com.A"></bean> --------------------------------------------------------- </beans>