博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
超级IOC容器SuperContainer
阅读量:4192 次
发布时间:2019-05-26

本文共 3174 字,大约阅读时间需要 10 分钟。

  在JavaEE乃至其它的java应用程序中,容器显得非常重要。web容器、applet容器、EJB容器等,可谓容器无处不在。

  从程序员的角度来说,IOC容器是一个非常好的东西,他能使得我们非常灵活的管理组件及依赖关系。可以毫不夸张地说,Spring就是靠着一套功能全面、灵活的IOC容器发家致富的。作为EasyJWeb特性系列的第五篇文章,我们来看看EasyJWeb中的IOC容器的特点。
  如果您看过EasyJWeb1.0的简介,就会发现他不仅仅是一个MVC。为了实现业务对象的很好管理,供核心MVC调用,在EasyJWeb中,我们提供了一个超级IOC容器。这个“超级”体现在,他属于容器中的容器,他可以容纳其它各种优秀的容器,并把这些各自独立的容器中的个体根据需要有机衔接配合起来,完成我们所需要做的事。
  当然,EasyJWeb自己也提供了一个简单的IOC容器,如果你不想或者没接触过其它的容器,那么你完全可以只用EasyJWeb的IOC容器,一样能写出非常优雅、松藕合的JavaEE应用。 
容器的使用非常简单,而且是完全可配置的,你可以根据需要把Spring容器、Guice容器、甚至EJB容器都纳入到EasyJWeb的SuperContainer中来。让他们在各自专业的领域里,为你工作。看代码:

 @Inject(name
=
"
personDao
"
)
 
private
 GenericDAO
<
Person
>
 dao;
public
 
void
 setDao(GenericDAO
<
Person
>
 dao) 
{
  
this.dao = dao;
 }

  在上面的CrudAction示例中,PersonAction需要一个DAO才能工作,在这里我们声明使用的是GenericDAO ,那么这个DAO在程序具体运行的过程中从哪儿来的,存放在哪儿?EasyJWeb都不关心这些事,你只需要通过@Inject这个标签,告诉我们要从超级IOC容器中启一个名叫personDao的对象。这样在程序运行的过程中,EasyJWeb会从超级IOC容器中查找名为personDao的对象,并注入到这个Action中,从而使得我们的Action能正常工作。

  实现依赖注入及控制反转,这不是什么奇特的事,每一个IOC框架都能实现这个功能。而不一样的是,EasyJWeb不但能从自己的IOC容器中得到依赖对象,而且也可以从任何其它的IOC容器中得到这个对象。比如我们可以在Spring容器中配置这个personDao,或者是使用Guice来管理这个personDao,乃至直接把这个personDao存放在另外一个服务器的EJB容器中。EasyJWeb会自动到这些地方去查找,并能把他们协调起来。
  有了超级IOC容器,系统管理员不再担心我们业务逻辑层组件的管理,老板也不需要担心在需要更换IOC容器所发生的移植成本。
  EasyJWeb的IOC容器同样实现了自动按名称、按类别等注入,另外还实现了不同生命周期范围的Bean管理。在默认的情况下,支持singleton、prototype、session、request等类型的Bean。
  另外,在EasyJWeb中,包括中央处理器RequestProcessor、验证器Validator、异常处理器ExceptionHandler在类的这些底层核心组件,都是通过EasyJWeb的超级容器来管理的。因此,你可以非常容易地根据自己的需要,更换EasyJWeb的一些部件。
  下面是在EasyJWeb超级容器中加入Spring容器的配置:

<
bean 
name
="springContainer"
   class
="org.springframework.web.context.support.XmlWebApplicationContext"
>
   
<
property 
name
="configLocations"
>
    
    
<
list
>
     
<
value
>
WEB-INF/classes/application.xml
value>
    
list>
   
property>
  
bean>
  
<bean name="innerSpringContainer"
   class
="com.easyjf.container.impl.SpringContainer">
   
<property name="factory" ref="springContainer" />
  
bean>

 

可以在Spring容器中配置EasyJWeb的中央处理器,甚至可以配置事务等,如下面的Spring配置文件:

 

xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:aop
="http://www.springframework.org/schema/aop"
 xmlns:tx
="http://www.springframework.org/schema/tx"
 xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
> 
 
<import resource="jpa-base.xml"/>
 
<import resource="service.xml"/>
 
<import resource="dao.xml"/>
 
<aop:config>
  
<aop:pointcut id="easyjwebProcessor"
   expression
="execution(* com.easyjf.web.RequestProcessor.process(..))" />
  
<aop:advisor advice-ref="txEasyjwebProcessorAdvice"
   pointcut-ref
="easyjwebProcessor" />
 
aop:config>
 
<tx:advice id="txEasyjwebProcessorAdvice"
  transaction-manager
="transactionManager">
  
<tx:attributes>
   
<tx:method name="*" propagation="REQUIRED" read-only="true" />
  
tx:attributes>
 
tx:advice>
 
<bean name="EasyJWeb-Processor" class="com.easyjf.web.core.DefaultRequestProcessor"/>
beans> 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1745130

你可能感兴趣的文章
rtlinux
查看>>
手滑的悲剧!女老板把1000000元转错账户 对方竟立马关机失联…
查看>>
京东拼购弹窗骗局5万人上当?回应:报道内容不实 保留追究权利
查看>>
华为Mate30系列诠释真旗舰:9月26日在国内正式发布
查看>>
3万亿巨大市场,难怪马云、刘强东要抢着去养猪
查看>>
传统金融为什么要做AI?平安保险CEO解读行业痛点
查看>>
蔚来汽车澄清“4年亏损57亿美元”说法:只有200亿人民币
查看>>
ARM:下一代架构也将继续供给华为
查看>>
太赞了!阿里巴巴AI每天服务全球10亿人
查看>>
苹果正式推送iPadOS 13.1、iOS 13.1,修复大量Bug,速升!
查看>>
阿里社交梦不灭,再推校园社交App,“Real如我”能成吗?
查看>>
“我只想选个座,你却要我社交?”航旅纵横用户遭骚扰,强行按头社交?
查看>>
95后夜猫子报告:三成熬夜到1点 夜间最爱追《乡村爱情》
查看>>
买iPhone 11的要不再等等?iPhone 12首曝:全系5G,回归经典造型
查看>>
快手联合创始人银鑫卸任A站法定代表人、董事、经理
查看>>
中国移动携手华为完成5G话音的全部功能测试
查看>>
官方暗示小米MIX Alpha重磅信息:屏下摄像头要成真?
查看>>
入手5G手机别太急!国内部分5G手机可能有网没信号
查看>>
雷军求别骂!小米9 Pro定价或许会很高
查看>>
掌趣科技登榜2019中国品牌出海新秀50强 全球化战略持续发力
查看>>