Spring学习笔记
javase吧
全部回复
仅看楼主
level 7
extends_die 楼主
2011年07月26日 05点07分 1
level 7
extends_die 楼主
Spring框架提倡的是接口编程,
何为接口编程,就是把要实现的功能通过分离提取,实行接口和实现分离,达到一种低耦合高内聚的原理。
2011年07月26日 05点07分 2
level 7
extends_die 楼主
对于接口的编程以及优势不懂的可以百度或者google,这里就不废话了,下面开始介绍Spring的使用。
2011年07月26日 05点07分 4
level 7
extends_die 楼主
Spring是什么?
Spring是一个轻量级的DI和AOP的框架。(DI:依赖注入,AOP:面向切面编程)
Spring核心功能(基本组件):
1.轻量级:spring框架可以打成2.5MB的jar包,spring的处理开支很小并且Spring是非侵入式的。
2.依赖注入:是一种松耦合的技术,简称DI(依赖注入),对象是被动接收依赖类而不是自己主动去找。对象不是从容器查找它的依赖类,而是容器在初始化对象时主动将它的依赖类注入给它。
3.面向切面:spring对aop提供支持,通过将业务逻辑从应用服务中分离出来,实现了内聚开发。应用对象只做业务逻辑,不负责其他系统问题。
4.容器:spring是一个容器,它包含并且管理应用对象的生命周期和配置,可以通过配置设定bean是单一实例还是每次请求产生一个实例,可以设定它们之间的关联关系。
5.框架:spring实现了使用简单的组件配置组合成一个复杂的应用,应用中的对象是通过xml文件配置组合起来的,spring提供了很多基础功能(事务管理,持久层集成等)使开发人员能够专注于开发应用逻辑。
这些就是spring的基本组件,spring的主要作用就是帮助你开发出松耦合的应用代码。

2011年07月26日 06点07分 5
level 7
extends_die 楼主
Spring模块介绍:
Core模块:整个模块当中Core是最底层的核心容器,core为spring框架提供了基础功能,例如BeanFactory类,这是Spring容器和Spring DI 所依赖的基础。
Context模块:Spring的context在core容器之上,beanFactory使Spring成为容器,而Context使Spring成为了框架。此模块扩展了BeanFactory,添加了对国际化、应用生命周期事件以及验证的支持。
AOP模块:此模块是Spring开发面向切面编程的基础,支持应用对象之间的松耦合。
DAO模块:Dao模块把编写JDBC时的一些代码 如:获得连接,创建statement,处理ResultSet结果、关闭连接 抽象出来,让数据库层代码变的简单清晰,也可以避免忘记释放资源而引起的问题。此模块还建立了一个异常处理层,可以不用再去解释那些隐晦专有的SQL错误信息。
ORM模块:Spring的ORM是在DAO之上,可以方便构建适合ORM解决方案的DAO,Spring的ORM不是自己做的实现,只是与主流ORM框架做了集成,包括hibernate、JPA、JDO和iBATIS。Spring的事务管理支持这些ORM框架以及JDBC。
JMX模块:Spring的JMX模块可以像JMX Mbeans一样方便的展现应用Bean,这样可以监控和重新配置运行中的应用程序。
JCA模块:JCA提供了一种标准的方法来集成java应用和多种企业信息系统,包括主框架和数据库。JCA很多方面和JDBC很像,JDBC主要是针对数据库访问,JCA则更关注连接遗留系统的通用API。Spring对JCA的支持类似于对JDBC的支持。
MVC框架:spring MVC框架,Spring自己提供的,改进了Spring在应用web层的松耦合技术。
Portlet MVC:如果想创建Portlet应用,可以使用spring的Portlet MVC 框架,此框架建立在Spring MVC框架基础上。
Web模块:Spring的web模块提供了支持SpringMVC和Portlet MVC的类。支持面向web的任务,例如多部分文件上传和编程绑定到业务对象的请求参数。包含了Struts和JSF的集成支持
Remoting模块:Spring的 Remoting允许将java对象的某些功能展现为远程对象,如果需要远程访问对象,Remoting模块会使编写远程对象很简单,就像本地POJO一样。
JMS模块:Spring的JMS模块可以将消息发送到JMS队里和主题。此模块还能帮助创建消息驱动的POJO,能够处理异步消息。
Spring基本上是由以上这些模块所组成的。
2011年07月26日 06点07分 6
level 7
extends_die 楼主
模块图:
2011年07月26日 06点07分 7
level 7
extends_die 楼主
Spring版的Hello world
- -| 学任何东西时,总是习惯写个Hello world先
创建一个接口用于测试,将实现与接口分离。

2011年07月26日 06点07分 8
level 7
extends_die 楼主
HelloWorld接口的实现类,只有一个属性:s 通过setter方法赋值。
2011年07月26日 06点07分 9
level 7
extends_die 楼主
Spring.xml配置信息通过<bean>元素中 <property>元素来设置s的值。
2011年07月26日 06点07分 10
level 7
extends_die 楼主
测试类:
通过beanfactory容器来装载bean通过getBean来获得引用。调用test()方法输出。
2011年07月26日 06点07分 11
level 7
extends_die 楼主
结构图:
需要两个jar包:commons-logging.jar和spring.jar
此贴中的实例使用的是spring2.5,官网上有下载,不会下载的可以回复,我上传到115网盘中。
2011年07月26日 06点07分 12
level 7
extends_die 楼主
依赖注入(DI)
DI是一个很容易理解的概念。
以前在Spring中叫DI和IOC(控制反转)
现在Martion Fowler 提出了只有DI依赖注入通常称为反向控制,
当我们在写一个复杂的程序时,都会需要至少两个以上相互合作的类来完成业务逻辑,通常情况下是对象自己负责得到需要合作的对象。这会导致代码耦合度高而且难以测试维护。
DI的优点就是松耦合,当使用DI时,对象的依赖性都是在对象创建时由Spring来创建依赖类,然后注入给对象,这就是依赖对象被注入到对象当中,所以DI对象如何得到它的合作对象的责任给反转了,不是对象去主动获得依赖对象,而是由spring来给予对象的依赖对象。
2011年07月26日 06点07分 13
level 7
extends_die 楼主
假如英格兰有一群优秀的骑士,打算在今年发动战争...(- -|例子有点搞笑)
那就是说需要一个类来表示国家,一个类来表示军团,这样国家和军团就产生合作关系(依赖),现在让我们来发动战争
创建一个国家的接口和实现类
实现类:
Legion类代表的是军团

2011年07月26日 06点07分 14
level 7
extends_die 楼主
军团接口和实现类

2011年07月26日 06点07分 15
level 7
extends_die 楼主
配置信息:
2011年07月26日 06点07分 16
这个图看不清楚啊
2013年03月14日 01点03分
level 7
extends_die 楼主
测试类:
2011年07月26日 06点07分 17
level 7
extends_die 楼主
过这个例子我们可以很明显的看出DI的作用,以往都是England自己去实例化Legion,但是现在则完全由Spring来管理来实例化,然后注入给England,England完全不必要去操心。假如需求更改,则可以添加或修改Legion实现类,然后修改配置文件即可,完全不需要修改与他有依赖关系的类。
2011年07月26日 06点07分 18
level 7
extends_die 楼主
Bean装配传统应用系统中的对象之间关联关系会导致复杂的代码,这样就变的很难复用,很难做单元测试,那是因为他们紧紧的耦合在一起。
在Spring中,对象不需要自己负责与其他对象的关联关系,是由Spring容器来负责把各个组件引用给予需要的对象。创建这种组件之间协作关系的动作就是DI的关键,被称之为装配。
在Spring当中,是由容器来创建、装配和配置组件,以及管理它们的整个生命周期(从new到finalize())
容器是Spring框架的核心,容器使用DI来管理所有组件,BeanFactory是最简单的容器,提供了基础的依赖注入支持,ApplicationContext则建立在BeanFactory之上,提供了系统架构服务,如:从属性文件中读取文本信息,向有关的事件监听器发布事件。

2011年07月26日 06点07分 19
level 7
extends_die 楼主
BeanFactory
BeanFactory采用的是工厂设计模式,这个类负责创建和分发Bean,但是和往常工厂模式不同的是,BeanFactory是一个通用工厂,可以创建和发布各种类型的bean。
BeanFactory除了实例化和发布应用对象以外,还负责创建协作对象间的关联关系,这样就把负担从bean自身以及bean的调用者中脱离出来。
BeanFactory最简单的实现XmlBeanFactory,根据xml中的配置装载Bean,它需要一个Resource实例给构造函数。
下面是所有的Resource
ByteArrayResource 定义内容由一组字节给定的资源
ClassPathResource 定义一个可以从classpath提取的资源
DescriptiveResource 定义包含资源描述符但是没有实际可读资源的资源
FileSystemResource定义可以从文件系统提取的资源
InputStreamResource定义可以从输入流提取的资源
PortletContextResource定义可以用在PortletContext中的资源
ServletContextResource定义可以用在ServletContext中的资源
UrlResource定义可以给定URL提取的资源
例如使用ClassPathResource 来创建XmlBeanFactory:
这句代码的意思是说 BeanFactory 从xml中得到信息,但并没有马上就实例化Bean,Bean被延迟载入到BeanFactory 中,是要在真正使用的时候才会实例化Bean。
这样就获得了一个bean并使用它,这是才会被实例化并使用依赖注入设置bean的属性。

2011年07月26日 06点07分 20
level 9
[顶]纠结死撞死2中。。
2011年07月26日 07点07分 21
1 2 3 4 尾页