Spring 基本知识


来源:Spring之旅专栏 in ITEYE website
http://spring.group.iteye.com/group/wiki/2298-spring

1、名词解释:
依赖注入、控制反转:应用本身不负责依赖对象的创建和维护,转而交由容器来完成。

2、Spring的主要特性。
(1)降低组件之间的耦合度,实现软件各层之间的解耦。
(2)可以使用容器提供的众多服务,如:事务管理服务、邮件服务、JMS服务、持久化服务等等。
(3)容器提供单例模式支持,开发人员不再需要自己编写实现代码。(?)
(4)容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能。
(5)容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate.
(6)对主流的应用框架提供了集成支持。

 

Introducing to Spring Framework

它的设计从一开始就是要帮助你编写易于测试的代码。Spring是使用测试驱动开发的工程的理想框架。

Spring仅仅是一个从2003年2月才开始的开源项目

Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。

Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。

Spring的主要目的是使J2EE易用和促进好编程习惯。

Bean factories 支持两种模式的对象:  
  Singleton:在此模式中,有一个具有特定名称的共享对象实例,它在查找时被获取。这是默认的,而且是最为经常使用的。它对于无状态对象是一种理想的模式。  
  Prototype:在此模式中,每次获取将创建一个独立的对象。例如,这可以被用于让用户拥有他们自己的对象。

【【
这种使用JavaBeans的动机在《Expert One-on-One J2EE Design and Development》的第四章中有描述,在TheServerSide网站上的有免费的PDF版本(http://www.theserverside.com/resources/article.jsp?l=RodJohnsonInterview)。
】】

Spring还提供了我们称做"autowire"的支持

1 <bean id="exampleBusinessObject"  
2 class="example.ExampleBusinessObject"
3 autowire="byType">
4
5 <property name="exampleParam"><value>10</value></property>
6 </bean>

 

#############################################
spring入门编程问题集锦
http://spring.group.iteye.com/group/wiki/356
#############################################
1、如何学习Spring?
  你可以通过下列途径学习spring:
    (1) spring下载包中doc目录下的MVC-step-by-step和sample目录下的例子都是比较好的spring开发的例子。
    (2) AppFuse集成了目前最流行的几个开源轻量级框架或者工具Ant,XDoclet,Spring,Hibernate(iBATIS),JUnit,Cactus,StrutsTestCase,Canoo's WebTest,Struts Menu,Display Tag Library,OSCache,JSTL,Struts 。 你可以通过AppFuse源代码来学习spring。
AppFuse网站:http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse

2、 Spring框架入门的编程问题解决后,如何更深地领会Spring框架呢?
  Expert One on one J2EE Design and Development
  Expert One on one J2EE Development Without EJB
  你也该看看martinfowler的Inversion of Control Containers and the Dependency Injection pattern。
    http://www.martinfowler.com/articles/injection.html

3、 再好好研读一下spring的文档。
  http://www.jactiongroup.net/reference/html/index.html(中文版,未全部翻译)

 

#############################################
Spring大探宝
http://spring.group.iteye.com/group/wiki/355
#############################################
如果只是使用ioc,只要知道配置文件怎么写就可以了。
如果想自己写一个ioc容器可以看看这个包里的代码,特别是BeanDefinition和BeanFactory的设计非常精彩

Spring除了IOC作为核心外,剩余的部分均以ioc为手段,或以ioc为目的,向前端,后端,深层和周边范围扩展。
  前端:Spring自带一个web mvc。它与主流的MVC框架提供的功能差不多。
  后端:Spring与一些DAO框架集成,更多的做到了搭桥的作用。
  深层:AOP和Transaction。
  周边:一方面,Spring内部集成框架和类库数量越来越多,如Quartz,JMS等;

另一方面,越来越多的项目在向Spring靠拢或以Spring为项目内核,如开源JMS服务器active mq,web中用到的valuelist等。

 

#############################################
spring事务探索
http://spring.group.iteye.com/group/wiki/1228
#############################################
使用spring的事务管理需要作这些事
  1,设置好事务源,比如DataSource,hibernate的session。如果有多个事务源要考虑他们之间是否有全局事务,如果有,老老实实用jta,否则就需要自己写一个manager了
  2,设置manager,根据你的事务源选择对应的PlatformTransactionManager
  3,选择实现事物的方式,用template还是interceptor。
      用template代码直观点,但是template所管辖的manager和你应用代码所用的事务源要一致。
      如果用interceptor千万注意,一定要调用interceptor那个bean,而不是原始的那个target。
    在坛子上我已经看到至少有两个朋友说spring事物不起作用,从配置和代码上看都正确,这时要好好查查,调用的bean是哪一个。
  4,这个是设计问题了,推荐事务处于一个较高层次,比如service上的某个函数,而底层的dao可以不考虑事务,否则可能会出现事务嵌套,增加程序复杂度。

 

#############################################
Spring源代码解析(三):Spring JDBC
http://spring.group.iteye.com/group/wiki/1224
#############################################
回调函数: 在Spring中,有许多类似 JdbcTemplate的模板,比如HibernateTemplate等等
一般而言这种Template中都是通过回调函数CallBack类的使用来完成功能的
客户需要在回调接口中实现自己需要的定制行为,比如使用客户想要用的SQL语句等。
一般来说回调函数的用法采用匿名类的方式来实现

#############################################
Spring声明式事务管理源码解读之事务开始
http://spring.group.iteye.com/group/wiki/1223
#############################################
有这样一个接口TransactionDefinition,其中定义了很多常量,它还有一个子接口TransactionAttribute,其中只有一个方法rollback。
TransactionDefinition中有很多常量定义,它们分别属于两种类型,传播途径和隔离级别

这个接口有一个默认的实现DefaultTransactionDefinition。然后它还有子类,比如说 DefaultTransactionAttribute。
Spring在判断一个方法是否需要事务体的时候其实是创建一个TransactionAttribute实现的实例.

真正判断是否需要事务的地方:在TransactionAspectSupport类里

#############################################
Spring源代码解析(六):Spring声明式事务处理
http://spring.group.iteye.com/group/wiki/1220
#############################################
使用Spring管理事务有声明式和编程式两种方式, 声明式事务处理通过AOP的实现把事物管理代码作为方面封装来横向插入到业务代码中,使得事务管理代码和业务代码解藕。

 

posted @ 2012-01-12 15:42  万法自然~  阅读(227)  评论(0编辑  收藏  举报