spring入门
Spring
Spring定义:
1.spring是一个独立的轻量级框架。
2.spring致力于JavaEE应用各层的解决方案,贯穿表现层,业务层,持久层,是极为优秀的webMVC框架。
3.为企业级应用开发提供了一个轻量级的解决方案,包括基于依赖注入的核心机制,基于AOP的声明式事务管理,与多种持久层技术的整合。
优点:
1.低侵入式设计,代码污染度低。
2.独立于各种应用服务器,基于spring框架,真正实现write once,run anywhere的承诺。
3.基于spring的核心IOC容器,降低业务对象替换的复杂性,提高组件之间的解耦。
4.Spring的AOP支持一些通用任务如安全,事务,日志的集中式处理,从而提供了更好的复用。
5.spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。
核心理论:
1.spring核心容器就是一个超级大工厂,所有的java对象皆可被其管理,被管理的一切java对象统称为bean,其管理方式两种:一是依赖注入;二是XML配置的方式
下载及安装:
1.登录http://repo.springsource.org/libs-release-local/站点,沿着目录列表org->springframework->spring进入,下载最新稳定版。
2.下载完成,得到一个spring-framework-4.0.4.RELEASE-dist.zip压缩文件,解压得到如下几个子文件夹
a)docs:该文件夹下存放Spring的相关文档,包括api参考文档,开发指南。
b)libs:该目录下的jar包分3类 —— i.Spring框架class文件的jar包;ii.spring框架源文件的jar包,以-source结尾;iii.spring框架api文档的压缩包,文件名以-javadoc结尾。
整个spring框架由21个模块组成,该目录下为每个模块配置了3个压缩包。
c)schemas:该目录下包括了Spring各种配置文件的XML Schema文档。
d)readme:说明性文档 。
3.将libs目录下所需要的class文件的jar包(21个)复制粘贴的项目工程的类加载路径下(即可通过添加环境变量方式添加,也可通过ant或IDE工具管理类加载路径)。
4.除此之外,spring核心容器必须依赖于commons-logging 的jar包,开发者还需登录http://commoms.apache.org/站点下载最新的 commons-logging 工具,解压得到的
commons-logging-1.1.3.jar也添加到类加载路径中。
创建管理beans的实例:
理论要点
1.依赖与被依赖:java应用中,存在大量互相调用的java对象,而这种调用关系业内称之为依赖关系,A对象调用了B对象的方法,则可以说A对象依赖于B对象,B对象
为被依赖对象。
2.反转控制与依赖注入:有一个需求,A对象需要调用B对象的方法。在以前,Java初学者通常是先创建B对象实例进行调用,这种方式代码虽然简单,但程序高度耦合,
效率低下,不利于程序拓展。后来调用者通过工厂方式获得被依赖组件,避免了类层次的硬编码耦合,但通过工厂获得被依赖对象,这会带来调用组件与被依赖对象
工厂的耦合。使用spring框架之后,调用者无须主动获取被依赖对象,而是通过注解的方式被动接受Spring容器为其的成员变量赋值即可。这种方式由主动获取变为被
动接受,所以也称这种方式为控制反转,和依赖注入其实是同一种行为。
程序
1.在eclipse新建Java工程,命名myspring。
2.在工程下新建lib文件夹,导入jar包(22个),并添加到类加载路径下。
3.工程src下创建com.spring.service和com.spring.service.impl两个包,然后在包下新建Prson接口及实现类Chinese
package com.spring.service; public interface Person { public void useAxc(); }
package com.spring.service.impl; import com.spring.service.Axc; import com.spring.service.Person; public class Chinese implements Person { private Axc axc; public void setAxc(Axc axc){ this.axc=axc; } @Override public void useAxc() { // TODO Auto-generated method stub System.out.println(axc.chop()); } }
在创建被依赖对象的类Axc接口及其实现类
package com.spring.service; public interface Axc { public String chop(); }
package com.spring.service.impl; import com.spring.service.Axc; public class StoneAxc implements Axc { @Override public String chop() { // TODO Auto-generated method stub return "石斧砍柴好慢"; } }
4.在工程src直接目录下创建beans.XML文件,开发者可以根据eclipse的提示在spring框架解压目录的schemas子目录下查找各种.xsd文件,这里选择4.0版本。下面是配置文件的代码
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans ../spring-2/src/spring-beans-4.0.xsd "> <bean id="chinese" class="com.spring.service.impl.Chinese"> <property name='axc' ref='stoneAxc'/> </bean> <bean id='stoneAxc' class='com.spring.service.impl.StoneAxc'/> </beans>
上面配置文件中,spring文件配置bean实例通常指定id和class两个属性。另外引用ref属性指向其他bean的id,可以实现管理bean之间调用。bean的赋值方式一般有两种,一个是通过构造器赋值, 使用<construtor-arg>标签配置,主要属性有两个:value(指向变量值),type(指向变量类型);一个是通过<properties/>标签赋值,相当于实体类的setter方法。
5.新建com.spring.main包,创建程序测试类Main,下面是测试类代码
package com.spring.main; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.spring.service.Person; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml"); Person p = ctx.getBean("chinese",Person.class); p.useAxc(); } }
6.运行测试类,成功后结果如下:
八月 10, 2017 11:09:24 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1c49094: startup date [Thu Aug 10 23:09:24 CST 2017]; root of context hierarchy
八月 10, 2017 11:09:24 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [beans.xml]
石斧砍柴好慢
至此,一个简单的spring管理bean实例创建成功!!!