浅析Spring、EJB与SCA架构

Spring是J2EE标准中的一个重要架构,它能有效的组织J2ee各应用层的对象。

在SSH中,Struts主要负责前面客户端提交表单的处理,Spring负责对主要业务的控制管理,Hibernate在最后边,负责数据的持久化,即描述的是POJO与数据库表的关系,尊从ORM模型。

依赖注入和控制反转是同一个概念,在传统程序实际中,调用者想要调用另一个对象需要自己创建被调用者的实例,在Spring中,创建被调用者的工作由Spring容器完成。当调用者需要的时候注入给调用者。

依赖注入有两种:设值注入和构造注入。

设值注入通过setter方法传入被调用者的实例,这种方式在Spring和SCA的配置文件中被大量使用。

在实现类中有如下的定义:

publicclasschineseimplementsPerson{

privateknifeknife;

publicchinese(){}

//设置注入所需的setter方法

publicvoidsetknife()

{

this.knife=knife;

}

//实现Person接口中的useknife()方法

publicvoiduseknife(){

System.out.println(knife.chop());

}

}

//Spring配置文件定义beans部分的主要内容

<beans>

<beanclass=com.zy.chinese//实现类所在的路径,即在哪个包下面id=chinese>

<propertyname="knife">

<REFlocal=""stoneknife"/">//stoneknife是knife接口的一个具体实现类

</bean>

<beanclass=com.zy.stoneknifeid=stoneknife/>

<beans>

//对比SCA架构配置组建的配置文件.composite

<?xmlversion="1.0"encoding="UTF-8"?>

<compositexmlns="http://www.osoa.org/xmlns/sca/1.0"

xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"

xmlns:c="http://wsTuscany"

targetNamespace="http://wsTuscany"

name="wsTuscany">

<componentname="ClientImpl">

<implementation.javaclass="com.zy.wsTuscanyClient.Client"/>

</component>

<referencename="hello"promote="ClientImpl/hello"target="wsTuscanyHello">

<interface.javainterface="com.zy.services.HelloInterface"/>

<binding.wsurl="http://localhost:8080/axis2/services/HelloZY"wsdlElement="http://services.zy.com/#wsdl.port(HelloInterface/HelloInterfacePort)"/>

</reference>

</composite>

SCA架构中管理的对象是组件,组件可以是本地的一个POJO普通实现类,也可以是外部的ws,本地的组件可以包装成ws供外部调用。

可以看到.composite文件中是由一个个的<compoment>对组成的,spring.xml配置文件中的标签是<bean>,配置文件中的配置规则实际是一样的,她们都是管理框架,只是配置对象的粒度不同。

普通的javabean相当于微软COM模型中的本地进程内的com组件,它是不能被跨进程访问的。EJB相当于DCOM,即分布式组件。它是基于java的远程防范调用(RMI)技术的,所以EJB可以被远程访问(跨进程,跨计算机)。EJB是一组基于分布式事务处理的企业级应用组件,但EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。

容器是一种能够为某种运行对象提供运行环境支持的地方(其实也就是服务器的概念),web容器或者叫web服务器主要是为jsp或servlet提供运行环境支持的,现在符合j2ee标准的EJB被部署在WebSpere、WebLogic这样的容器中。客户访问EJB通常不直接访问而是通过它的代理,即EJB容器去访问。这也符合SCA组件架构模式。基于组件模式的架构都需要一个容器来管理各个组件,在SCA型中这个容器对象就是SCADomain域。

Spring是j2ee规范中最轻量级的容器其次是EJB容器再次是SCA域

相关推荐