posts - 0,  comments - 0,  trackbacks - 0

1、Spring 框架的架构
(1)Spring 框架是一个分层架构
不同于很多技术,Spring并不是一个“要么全部,要么没有”的东西,它是一个分层的结构。我们可以从中选取我们感兴趣的部分,而不必理会其它的部分。
我们常用得最多的部分就是Spring的Core部分,也就是基于bean的配置框架,对于其上的MVC、ORM、DAO等等,我们可以并不需要了解,但这丝毫不影响我们的应用。
(2)主要由 7 个定义良好的模块组成
Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如下图所示。
       
2、Spring 框架的7 个模块功能说明
  组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
(1)核心容器(Spring Core)
核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
(2)Spring 上下文(Spring Context)
Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
(3)Spring 的面向方面的编程(Spring AOP)
通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。
Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
(4)Spring JDBC DAO 抽象层(Spring DAO)
JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。
Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
(5)Spring ORM 的对象关系工具(Spring ORM)
Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map;并且利用HibernateDaoSupport类可以重用现有的Hibernate mapping。
所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
(6)Spring Web 模块(Spring Web)
Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。
Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
(7)Spring MVC 框架(Spring Web MVC)
MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。


简单的说我们主要用它来管理我们的java Bean 。这里我只着眼于应用简单说说高手可以离开或是给予一些指点,小弟不胜感激。
首先我们看一下它的典型配置文件:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<!--  - Application context definition for "springapp" DispatcherServlet.  -->
    <beans>
            <bean id="timeDateBusiness" class="springwebapp.TimeDateBusiness"/>
            <bean id="springappController" class="springwebapp.SpringappController">
               <property name="timeDateBusinessBean">
                          <ref bean="timeDateBusiness"/>
                </property>
                 <property name="viewPage">
                      <value>hello</value>
                 </property>
           </bean>
<!-- userLogin Item
-->
<!--
           <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                <property name="driverClassName">
                    <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
                </property>
                <property name="url">
                    <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=NetBookDB</value>
                </property>
                <property name="username">
                    <value>sa</value>
                </property>
                <property name="password">
                    <value>1234</value>
                </property>
            </bean>
-->
           <bean id="dataSource"    class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">
                  <property name="driverClassName">
                    <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
                  </property>
                  <property name="url">
                    <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=NetBookDB</value>
                  </property>
                  <property name="username">
                    <value>sa</value>
                  </property>
                 <property name="password">
                    <value>1234</value>
                </property>
           </bean>
           <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                <property name="dataSource">
                    <ref bean="dataSource"/>
                </property>
            </bean>

            <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
                <property name="dataSource">
                    <ref bean="dataSource"/>
                </property>
            </bean>
          <bean id="userLoginImpleBean" class="springwebapp.UserLoginImple">
                <property name="jdbcTemplate">
                    <ref bean="jdbcTemplate"/>
                </property>
                <property name="transactionManager">
                    <ref bean="transactionManager"/>
                </property>
          </bean>

          <bean id="userLoginController" class="springwebapp.UserLoginController">
                <property name="commandClass">
                    <value>springwebapp.UserLoginForm</value>
                </property>
               <property name="userLoginImpleBean">
                          <ref bean="userLoginImpleBean"/>
                </property>
                <property name="loginSuccess">
                    <value>loginSuccess</value>
                </property>
                <property name="loginFailure">
                    <value>loginFailure</value>
                </property>
           </bean>

           <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="viewClass">
                    <value>org.springframework.web.servlet.view.InternalResourceView</value>
                </property>
                <property name="prefix">
                    <value>/</value>
                </property>
                <property name="suffix">
                    <value>.jsp</value>
                </property>

            </bean>
            <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
                <property name="mappings">
                        <props>
                          <prop key="/hello.do">springappController</prop>
                         <prop key="/userlogin.do">userLoginController</prop>
                        </props>
                </property>
            </bean>
          <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
                <property name="defaultErrorView">
                        <value>showOtherError</value>
                </property>
                <property name="exceptionMappings">
                        <props>
                                <prop key="java.sql.SQLException">showDBError</prop>
                                <prop key="java.lang.RuntimeException">showRuntimeError</prop>
                        </props>
                </property>
           </bean>
      </beans>

Spring核心的BeanWrapper和BeanFactory类
在org.springframework.beans包中包括了这些核心组件的实现类,核心中的核心为BeanWrapper和BeanFactory类。这两个类从技术角度而言并不复杂,但对于Spring 框架而言,却是关键所在。
5、org.springframework.beans 包
(1)其中的相关的类和接口


(2)Spring 的核心是org.springframework.beans 包
该包中所提供的各个类和接口主要是为使用JavaBeans 技术、并且能够实现按名检索对象及管理对象间的关系而设计的。
这个包通常不是由用户直接使用,而是由服务器将其用作其他多数功能的底层中介。
关于beans 包,有三个重要的概念。
BeanWrapper接口
首先,它提供了设置/读取Javabeans 属性功能的BeanWrapper接口。
BeanFactory接口
第二个重要概念是Bean 工厂。BeanFactory接口 是一个泛化工厂,具有实例化对象和管理不同对象间关系的能力。BeanFactory 可以管理几种不同类型的bean,并且支持串行化及其他生命周期方法。
BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。
bean 的定义(命名规则)
BeanFactory 是按照bean 定义(BeanDefinition)来实例化对象的。BeanDefinition,顾名思义,是我们对bean 的定义。
通过BeanDefinition,我们不仅可以定义bean 的类结构、实例化的方式,还可以定义bean 在运行时的配合者(相关联的其它对象)。
(3)Spring 组件Bean中的属性命名规则
表达式
说明
name 表示属性“name”
对应的方法是getName()或者isName()或者setName()
account.name 表示属性“ account”的嵌套属性“name”
对应的方法是getAccount().setName()或者getAccount().getName()
(此时的account应该为一个对象的类型)
account[2]
表示带索引属性“account”的第三个元素。带索引属性可以是array类型、list 类型或者其他普通的collection

配置文件中的主要项目
Bean属性值及依赖关系(对其他Bean的引用)
Bean创建模式(是否Singleton模式,即是否只针对指定类维持全局唯一的实例)
Bean初始化和销毁方法
Bean的依赖关系
Bean的定义配置标签中的主要属性的说明
属性
属性的说明
class
Bean的类名称
singleton or prototype
单例还是原型
bean properties
设置bean的属性及其关联的对象
constructor arguments
设置bean的属性及其关联的对象
autowiring mode
自动装配的关联的对象
dependency checking mode
依赖检查
initialization method
bean的自然特性和生命周期特性中的init
destruction method
bean的自然特性和生命周期特性中的destroy

一个较为完整的Bean配置示例
<beans>
<description>Spring Bean Configuration Sample</description>
<bean id="TheAction"                                                                                         ⑴
class="net.xiaxin.spring.qs.UpperAction"                                         ⑵
singleton="true"                                                                                         ⑶
init-method="init"                                                                                 ⑷
destroy-method="cleanup"                                                                         ⑸
depends-on="ActionManager">                                                                 ⑹
<property name="message">
<value>HeLLo</value>                                                                         ⑺
</property>
<property name="desc">
<null/>
</property>
<property name="dataSource">
<ref local="dataSource"/>                                                                 ⑻
</property>
</bean>
<bean id="dataSource"  class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/sample</value>
</property>
</bean>
</beans>
(5)解释说明
⑴ id:Java Bean在BeanFactory中的唯一标识,代码中通过BeanFactory获取JavaBean实例时需以此作为索引名称。
⑵ class:        JavaBean 类名
⑶ singleton:指定此JavaBean是否采用单例(Singleton)模式,如果设为"true",则在BeanFactory作用范围内,只维护此JavaBean的一个实例,代码通过BeanFactory获得此JavaBean实例的引用。反之,如果设为"false",则通过BeanFactory获取此Java Bean实例时,BeanFactory每次都将创建一个新的实例返回。
⑷ init-method:初始化方法,此方法将在BeanFactory创建JavaBean实例之后,在向应用层返回引用之前执行。一般用于一些资源的初始化工作。
⑸ destroy-method:销毁方法。此方法将在BeanFactory销毁的时候执行,一般用于资源释放。
⑹ depends-on:Bean依赖关系。一般情况下无需设定。Spring会根据情况组织各个依赖关系的构建工作(这里示例中的depends-on属性非必须)。
只有某些特殊情况下,如JavaBean中的某些静态变量需要进行初始化(这是一种BadSmell,应该在设计上应该避免)。通过depends-on指定其依赖关系可保证在此Bean加载之前,首先对depends-on所指定的资源进行加载。
⑺ <value>:通过<value/>节点可指定属性值。BeanFactory将自动根据JavaBean对应的属性类型加以匹配。
上面的"desc"属性提供了一个null值的设定示例。注意<value></value>代表一个空字符串,如果需要将属性值设定为null,必须使用<null/>节点。
⑻ <ref>:指定了属性对BeanFactory中其他Bean的引用关系。上面示例中的TheAction的dataSource属性引用了id为dataSource的Bean。BeanFactory将在运行期创建dataSource bean实例,并将其引用传入TheAction Bean的dataSource属性。

posted on 2006-05-09 15:29 wangj 阅读(150) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

留言簿

文章档案

搜索

  •  

最新评论