四、依赖注入
两个框架都实现了依赖注入,都能自动往Action中自动注入所需要的业务组件。EasyJWeb的依赖注入直接依靠他内置的IoC容器,而Struts2的依赖注入依靠拦截器ActionAutowiringInterceptor进行注入。EasyJWeb的依赖注入是真正实现不要任何配置就能自动注入应用程序中各层(业务层、持久层等)中用到的业务组件的,你可以通过这个简单的添删改查实例来看见效果。
两者都可以直接借助第三方的IoC容器如Spring。下面是在EasyJWeb中使用Spring容器,需要在EasyJWeb的配置文件中加入下面的配置:
<!-- 申明Spring为easyjweb 应用容器开始 -->
<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 应用容器结束 -->
</beans>
Struts2可以使用代理的方式,先在web.xml文件中通过下面的配置启动spring容器:
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
然后在struts的配置文件使用指定struts.objectFactory为spring即可。
<constant name="struts.objectFactory" value="spring" />
另外一点区别是,EasyJWeb的Action都是由EasyJWeb的IoC容器管理,不需要用其它容器来管理,因为EasyJWeb的IoC容器会把其它容器中的业务组件注入到Action的相应属性中,你可以把业务组件同时放在EJB容器、Spring容器、或者Guice容器中。