SoybeanMilk Java MVC框架与Spring整合

    技术2024-04-16  11

    你可以把SoybeanMilk 框架的功能简单地理解为“从对象工厂取得某个ID对应的对象并调用它的某个方法”,而Spring就是以ID来管理对象的,因此SoybeanMilk可以很容易地与Spring整合。

     

    框架的org.soybeanMilk.web.servlet.DispatchServlet提供了一个用于扩展对象工厂的初始化参数“external-resolver-factory-key ”,它可以用于整合Spring、Guice等IOC容器。

     

    下面介绍如何将SoybeanMilk与Spring整合。

     

    首先,定义一个对象工厂:

    public class SpringResolverFactory implements org.soybeanMilk.core.resolver.ResolverFactory { private BeanFactory beanFactory; public MySpringResolverFactory(BeanFactory beanFactory) { this.beanFactory=beanFactory; } @Override public Object getResolver(Serializable resolverId) { return beanFactory == null ? null : beanFactory.getBean(resolverId); } }

    然后 定义一个应用监听器,并把它配置在web.xml中Spring初始化监听器之后:

     

    package my; public class SpringResolverFactoryInitListener implements ServletContextListener { public void contextDestroyed(ServletContextEvent event){} public void contextInitialized(ServletContextEvent event) { ServletContext context=event.getServletContext(); BeanFactory springContext=WebApplicationContextUtils.getWebApplicationContext(context); SpringResolverFactory srf=new SpringResolverFactory(springContext); context.setAttribute("springAppContextResolverFactory",rf); } }

    <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>my.SpringResolverFactoryInitListener</listener-class> </listener>

    然后,将DispatchServlet初始化参数“external-resolver-factory-key ”的值设置为“springAppContextResolverFactory”:

    <servlet> <servlet-name>dispatchServlet</servlet-name> <servlet-class>org.soybeanMilk.web.servlet.DispatchServlet</servlet-class> <init-param> <param-name>external-resolver-factory-key</param-name> <param-value>springAppContextResolverFactory</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatchServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>

    完成!

    现在,你可以在SoybeanMilk配置文件<invoke>标签的resolver属性中使用在Spring中定义的那些<bean>了。

     

    比如,假设有下面的Spring配置:

    <bean id="helloWorldBean"> .... </bean>

    那么你可以在SoybeanMilk配置中直接调用这个bean的方法:

    <action name="/helloWorld.do"> <invoke> request.message=helloWorldBean.helloWorld() </invoke> <target url="/helloWorld.jsp" /> </action>

    最新回复(0)