`
snoopy7713
  • 浏览: 1148899 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

zk+hibernate+spring零配置

    博客分类:
  • ZK
阅读更多

zk+hibernate+spring零配置

 

zk5.0.5

 

hibernate3.6

 

spring3.05

 

也许你在使用apply或者use一个类名的或者<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?> 

 

那么下面的方法对你也许是一种更优雅的方式

 

 

 

一,spring自动扫描注解配置,如果熟悉ss2h,看起来没什么不同

 

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"  
  6.     xmlns:lang="http://www.springframework.org/schema/lang" xmlns:oxm="http://www.springframework.org/schema/oxm"  
  7.     xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx"  
  8.     xmlns:util="http://www.springframework.org/schema/util"  
  9.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  10.         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
  11.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd   
  12.         http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd   
  13.         http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd   
  14.         http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd   
  15.         http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd   
  16.         http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd   
  17.         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
  18.         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">  
  19.   
  20.     <description>系统配置信息</description>  
  21.        
  22.        
  23.     <!-- 定义受环境影响易变的变量 -->  
  24.   
  25.     <context:property-placeholder location="/WEB-INF/config/application.properties" />  
  26.        
  27.     <!--  -->  
  28.     <!-- 数据源配置 -->  
  29.     <!--  -->  
  30.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  
  31.         <property name="driverClass" value="${jdbc.driverClass}" />  
  32.         <property name="jdbcUrl" value="${jdbc.url}" />  
  33.         <property name="user" value="${jdbc.username}" />  
  34.         <property name="password" value="${jdbc.password}" />  
  35.         <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>  
  36.         <property name="minPoolSize" value="${jdbc.minPoolSize}">  
  37.         </property>  
  38.         <property name="initialPoolSize" value="${jdbc.initialPoolSize}">  
  39.         </property>  
  40.         <property name="maxIdleTime" value="${jdbc.maxIdleTime}">  
  41.         </property>  
  42.         <property name="acquireIncrement" value="${jdbc.acquireIncrement}">  
  43.         </property>  
  44.         <property name="acquireRetryAttempts" value="${jdbc.acquireRetryAttempts}">  
  45.         </property>  
  46.         <property name="acquireRetryDelay" value="${jdbc.acquireRetryDelay}">  
  47.         </property>  
  48.         <property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}">  
  49.         </property>  
  50.         <property name="preferredTestQuery" value="${jdbc.preferredTestQuery}">  
  51.         </property>  
  52.         <property name="numHelperThreads" value="${jdbc.numHelperThreads}">  
  53.         </property>  
  54.     </bean>  
  55.   
  56.     <bean id="sessionFactory"  
  57.         class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
  58.         <property name="dataSource" ref="dataSource" />  
  59.         <property name="hibernateProperties">  
  60.             <props>  
  61.                 <prop key="hibernate.dialect">${hibernate.dialect}</prop>  
  62.                 <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>  
  63.                 <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>  
  64.                 <prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>  
  65.                 <prop key="hibernate.max_fetch_depth">${hibernate.max_fetch_depth}</prop>  
  66.                 <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>  
  67.                 <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>  
  68.                 <prop key="hibernate.connection.autocommit">${hibernate.connection.autocommit}</prop>  
  69.                 <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>  
  70.                 <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>  
  71.                 <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>  
  72.                 <prop key="hibernate.cglib.use_reflection_optimizer">${hibernate.cglib.use_reflection_optimizer}</prop>  
  73.             </props>  
  74.         </property>  
  75.         <property name="packagesToScan" value="org.zkway.entity" />  
  76.     </bean>  
  77.   
  78.     <!-- 事务管理器配置,单数据源事务 -->  
  79.     <bean id="transactionManager"  
  80.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  81.         <property name="sessionFactory" ref="sessionFactory" />  
  82.     </bean>  
  83.   
  84.     <!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->  
  85.     <context:component-scan base-package="org.zkway" />  
  86.     <!-- 使用annotation定义事务 -->  
  87.     <tx:annotation-driven transaction-manager="transactionManager"  
  88.         proxy-target-class="true" />  
  89.   
  90. </beans>  
<?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:context="http://www.springframework.org/schema/context"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:lang="http://www.springframework.org/schema/lang" xmlns:oxm="http://www.springframework.org/schema/oxm"
	xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
		http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
		http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd
		http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

	<description>系统配置信息</description>
	
	
	<!-- 定义受环境影响易变的变量 -->

	<context:property-placeholder location="/WEB-INF/config/application.properties" />
	
	<!--  -->
	<!-- 数据源配置 -->
	<!--  -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClass}" />
		<property name="jdbcUrl" value="${jdbc.url}" />
		<property name="user" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
		<property name="minPoolSize" value="${jdbc.minPoolSize}">
		</property>
		<property name="initialPoolSize" value="${jdbc.initialPoolSize}">
		</property>
		<property name="maxIdleTime" value="${jdbc.maxIdleTime}">
		</property>
		<property name="acquireIncrement" value="${jdbc.acquireIncrement}">
		</property>
		<property name="acquireRetryAttempts" value="${jdbc.acquireRetryAttempts}">
		</property>
		<property name="acquireRetryDelay" value="${jdbc.acquireRetryDelay}">
		</property>
		<property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}">
		</property>
		<property name="preferredTestQuery" value="${jdbc.preferredTestQuery}">
		</property>
		<property name="numHelperThreads" value="${jdbc.numHelperThreads}">
		</property>
	</bean>

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
				<prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>
				<prop key="hibernate.max_fetch_depth">${hibernate.max_fetch_depth}</prop>
				<prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>
				<prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
				<prop key="hibernate.connection.autocommit">${hibernate.connection.autocommit}</prop>
				<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
				<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
				<prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>
				<prop key="hibernate.cglib.use_reflection_optimizer">${hibernate.cglib.use_reflection_optimizer}</prop>
			</props>
		</property>
		<property name="packagesToScan" value="org.zkway.entity" />
	</bean>

	<!-- 事务管理器配置,单数据源事务 -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

	<!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->
	<context:component-scan base-package="org.zkway" />
	<!-- 使用annotation定义事务 -->
	<tx:annotation-driven transaction-manager="transactionManager"
		proxy-target-class="true" />

</beans>

 

 二,zk controller 注解配置,注意scope必须是prototype,因为composer是一个状态对象

 

 

Java代码 复制代码 收藏代码
  1. @Controller  
  2. @Scope("prototype")   
  3. public class LoginController extends GenericAutowireComposer {  
@Controller
@Scope("prototype")
public class LoginController extends GenericAutowireComposer {

 

 

 

三,页面中使用ctrl

 

    首先要引入我自定义的el函数库,zktools工具将在下面讲到

 

Xml代码 复制代码 收藏代码
  1. <?taglib uri="http://www.zkoss.org/zktools/zktools" prefix="z" ?>  
<?taglib uri="http://www.zkoss.org/zktools/zktools" prefix="z" ?>


 

 然后在window apply中使用,其中z是prefix="z" 中的z,ctrl是zktools.jar中定义的一个el函数,这个和c标签很类  似, 'loginController'是【二】中LoginController类spring 受管理bean名字,通常我们喜欢使用

长长的类路径apply="org.zkway.web.controller.LoginController", 

但这样创建的对象不是spring管理,你无法向LoginController类里注入service,当然你可以使用SpringUtil.getBean

获取bean事例,但就丧失使用annotation的好处了

 

 

Xml代码 复制代码 收藏代码
  1. <window apply="${z:ctrl('loginController')}" width="300px"  
<window apply="${z:ctrl('loginController')}" width="300px"

 

 

 

 完整使用

 

 

 

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <?page  cacheable="false" language="xul/html" zscriptLanguage="Java" contentType="text/html;charset=UTF-8"?>  
  3. <?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" ?>  
  4. <?taglib uri="http://www.zkoss.org/zktools/zktools" prefix="z" ?>  
  5. <div  
  6.     style="background: url('images/headerbg.png') repeat-x;  background-position:0 -53px;height:100%;"  
  7.     xmlns:w="client" xmlns:n="native" xmlns="http://www.zkoss.org/2005/zul"  
  8.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  9.     xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd">  
  10.     <window apply="${z:ctrl('loginController')}" width="300px"  
  11.         height="140px" onOK="Events.postEvent(&quot;onClick&quot;,btnLogin,null);"  
  12.         mode="overlapped" position="center,top" style="margin-top:100px;">  
<?xml version="1.0" encoding="utf-8"?>
<?page  cacheable="false" language="xul/html" zscriptLanguage="Java" contentType="text/html;charset=UTF-8"?>
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" ?>
<?taglib uri="http://www.zkoss.org/zktools/zktools" prefix="z" ?>
<div
	style="background: url('images/headerbg.png') repeat-x;  background-position:0 -53px;height:100%;"
	xmlns:w="client" xmlns:n="native" xmlns="http://www.zkoss.org/2005/zul"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd">
	<window apply="${z:ctrl('loginController')}" width="300px"
		height="140px" onOK="Events.postEvent(&quot;onClick&quot;,btnLogin,null);"
		mode="overlapped" position="center,top" style="margin-top:100px;">

 

 

 

 

 

 

四,获取spring bean的el函数

在【三】中的页面zul中,我们仅仅简单的使用了一个表达式${z:ctrl('loginController')}, 这个表达式由

zk框架解释,还记的我们在页面首部添加的一个指令吗?

<?taglib uri="http://www.zkoss.org/zktools/zktools" prefix="z" ?>

和jsp c标签类似, zk中的标签也是在tld文件中定义的,大部分的web容器都可以自动加载tld文件,

zk也是一样,但zk不会自动加载tld,它自动加载类路径下的一个metainfo/tld/config.xml文件,这是zk的约定

 

 

 

 

在config.xml文件中我定义了如下内容,当然这些也是zk的约定,taglib-location告诉zk框架tld文件位置,
那么zk自动去找这个文件并解析

 

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!--   
  3.  
  4.  by sunflower  
  5.    
  6.  -->  
  7. <config>  
  8.     <version>  
  9.         <version-class>org.zkway.zktools.Version</version-class>  
  10.         <version-uid>1.0</version-uid>  
  11.     </version>  
  12.     <taglib>  
  13.         <taglib-uri>http://www.zkoss.org/zktools/zktools</taglib-uri>  
  14.         <taglib-location>/web/WEB-INF/tld/zktools/zktools.tld</taglib-location>  
  15.     </taglib>  
  16. </config>  
<?xml version="1.0" encoding="UTF-8"?>
<!-- 

 by sunflower
 
 -->
<config>
	<version>
		<version-class>org.zkway.zktools.Version</version-class>
		<version-uid>1.0</version-uid>
	</version>
	<taglib>
		<taglib-uri>http://www.zkoss.org/zktools/zktools</taglib-uri>
		<taglib-location>/web/WEB-INF/tld/zktools/zktools.tld</taglib-location>
	</taglib>
</config>

 

那么我们看看zktools.tld里如何定义的

 

Xml代码 复制代码 收藏代码
  1. <!--  -->  
  2. <!-- 获取spring 管理bean -->  
  3. <!--  -->  
  4. <function>  
  5.     <name>ctrl</name>  
  6.     <function-class>org.zkway.zktools.ZkCommonTools</function-class>  
  7.     <function-signature>java.lang.Object getController(java.lang.String)</function-signature>  
  8.     <description>获取spring 管理controller</description>  
  9. </function>  
  10.   
  11. <function>  
  12.     <name>comp</name>  
  13.     <function-class>org.zkway.zktools.ZkCommonTools</function-class>  
  14.     <function-signature>java.lang.Object getComponent(java.lang.String)</function-signature>  
  15.     <description>获取spring 管理组件对象</description>  
  16. </function>  
  17.        
  18. <function>  
  19.     <name>bean</name>  
  20.     <function-class>org.zkway.zktools.ZkCommonTools</function-class>  
  21.     <function-signature>java.lang.Object getBean(java.lang.String)</function-signature>  
  22.     <description>获取spring 管理bean对象</description>  
  23. </function>  
  24.   
  25. <!--  -->  
  26. <!-- 工具函数 -->  
  27. <!--  -->  
  28. <function>  
  29.     <name>size</name>  
  30.     <function-class>org.zkway.zktools.ZkCommonTools</function-class>  
  31.     <function-signature>int size(java.lang.Object)</function-signature>  
  32.     <description>获取一个对象的大小</description>  
  33. </function>  
  34. <function>  
  35.     <name>length</name>  
  36.     <function-class>org.zkway.zktools.ZkCommonTools</function-class>  
  37.     <function-signature>int size(java.lang.Object)</function-signature>  
  38.     <description>获取一个对象的大小</description>  
  39. </function>  
  40. <function>  
  41.     <name>empty</name>  
  42.     <function-class>org.zkway.zktools.ZkCommonTools</function-class>  
  43.     <function-signature>boolean isEmpty(java.lang.Object)</function-signature>  
  44.     <description>判断一个对象是否是空对象</description>  
  45. </function>  
  46.   
  47. <!--  -->  
  48. <!-- 日期工具函数 -->  
  49. <!--  -->  
  50.    <function>  
  51.     <name>now</name>  
  52.     <function-class>org.zkway.zktools.ZkCommonTools</function-class>  
  53.     <function-signature>java.util.Date currentTime()</function-signature>  
  54.     <description>获取当前时间</description>  
  55. </function>  
  56. <function>  
  57.     <name>today</name>  
  58.     <function-class>org.zkway.zktools.ZkCommonTools</function-class>  
  59.     <function-signature>java.util.Date today(int, int, int)</function-signature>  
  60.     <description>获取今天的日期时间,可以指定今天时分秒,-1表示不设置</description>  
  61. </function>  
  62. <function>  
  63.     <name>firstDayOfMonth</name>  
  64.     <function-class>org.zkway.zktools.ZkCommonTools</function-class>  
  65.     <function-signature>java.util.Date firstDayOfMonth()</function-signature>  
  66.     <description>获取当前月的第一天</description>  
  67. </function>  
  68. <function>  
  69.     <name>lastDayOfMonth</name>  
  70.     <function-class>org.zkway.zktools.ZkCommonTools</function-class>  
  71.     <function-signature>java.util.Date lastDayOfMonth()</function-signature>  
  72.     <description>获取当前月的最后一天</description>  
  73. </function>  
  74.   
  75. <function>  
  76.     <name>fmtDate</name>  
  77.     <function-class>org.zkway.zktools.ZkCommonTools</function-class>  
  78.     <function-signature>java.lang.String formatDate(java.lang.String)</function-signature>  
  79.     <description>根据参数指定的模式,格式化当前日期</description>  
  80. </function>  
 <!--  -->
	<!-- 获取spring 管理bean -->
	<!--  -->
	<function>
		<name>ctrl</name>
		<function-class>org.zkway.zktools.ZkCommonTools</function-class>
		<function-signature>java.lang.Object getController(java.lang.String)</function-signature>
		<description>获取spring 管理controller</description>
	</function>
	
	<function>
		<name>comp</name>
		<function-class>org.zkway.zktools.ZkCommonTools</function-class>
		<function-signature>java.lang.Object getComponent(java.lang.String)</function-signature>
		<description>获取spring 管理组件对象</description>
	</function>
		
	<function>
		<name>bean</name>
		<function-class>org.zkway.zktools.ZkCommonTools</function-class>
		<function-signature>java.lang.Object getBean(java.lang.String)</function-signature>
		<description>获取spring 管理bean对象</description>
	</function>
	
	<!--  -->
	<!-- 工具函数 -->
	<!--  -->
	<function>
		<name>size</name>
		<function-class>org.zkway.zktools.ZkCommonTools</function-class>
		<function-signature>int size(java.lang.Object)</function-signature>
		<description>获取一个对象的大小</description>
	</function>
	<function>
		<name>length</name>
		<function-class>org.zkway.zktools.ZkCommonTools</function-class>
		<function-signature>int size(java.lang.Object)</function-signature>
		<description>获取一个对象的大小</description>
	</function>
	<function>
		<name>empty</name>
		<function-class>org.zkway.zktools.ZkCommonTools</function-class>
		<function-signature>boolean isEmpty(java.lang.Object)</function-signature>
		<description>判断一个对象是否是空对象</description>
	</function>
	
	<!--  -->
	<!-- 日期工具函数 -->
	<!--  -->
    <function>
		<name>now</name>
		<function-class>org.zkway.zktools.ZkCommonTools</function-class>
		<function-signature>java.util.Date currentTime()</function-signature>
		<description>获取当前时间</description>
	</function>
	<function>
		<name>today</name>
		<function-class>org.zkway.zktools.ZkCommonTools</function-class>
		<function-signature>java.util.Date today(int, int, int)</function-signature>
		<description>获取今天的日期时间,可以指定今天时分秒,-1表示不设置</description>
	</function>
	<function>
		<name>firstDayOfMonth</name>
		<function-class>org.zkway.zktools.ZkCommonTools</function-class>
		<function-signature>java.util.Date firstDayOfMonth()</function-signature>
		<description>获取当前月的第一天</description>
	</function>
	<function>
		<name>lastDayOfMonth</name>
		<function-class>org.zkway.zktools.ZkCommonTools</function-class>
		<function-signature>java.util.Date lastDayOfMonth()</function-signature>
		<description>获取当前月的最后一天</description>
	</function>
	
	<function>
		<name>fmtDate</name>
		<function-class>org.zkway.zktools.ZkCommonTools</function-class>
		<function-signature>java.lang.String formatDate(java.lang.String)</function-signature>
		<description>根据参数指定的模式,格式化当前日期</description>
	</function>

 

 

 

1)<name>定义了el函数的名字,例如${z:ctrl('loginController')}中的ctrl对应以下中的ctrl

 

Xml代码 复制代码 收藏代码
  1. <function>  
  2.    <name>ctrl</name>  
  3.    <function-class>org.zkway.zktools.ZkCommonTools</function-class>  
  4.    <function-signature>java.lang.Object getController(java.lang.String)</function-signature>  
  5.    <description>获取spring 管理controller</description>  
  6. </function>  
<function>
   <name>ctrl</name>
   <function-class>org.zkway.zktools.ZkCommonTools</function-class>
   <function-signature>java.lang.Object getController(java.lang.String)</function-signature>
   <description>获取spring 管理controller</description>
</function>

 
2)function-signature函数指定了函数签名,具体哪个函数

3)function-class为function-signature函数所属的类

4)description为函数描述

 

那么这个函数必须符合什么规范呢:public,static 可以不是final

 

Java代码 复制代码 收藏代码
  1. public class ZkCommonTools {   
  2.   
  3.     /**  
  4.      * 获取spring管理的控制器对象,  
  5.      * <p>  
  6.      *   
  7.      * 支持的类型为:{@link Composer},{@link Component},{@link FullComposer}  
  8.      *   
  9.      * @param beanName  
  10.      * @return  
  11.      */  
  12.     public static final Object getController(String beanName) {   
  13.         Object controller = SpringUtil.getBean(beanName);   
  14.         if (controller instanceof Composer)   
  15.             return controller;   
  16.         else if (controller instanceof FullComposer)   
  17.             return controller;   
  18.         else if (controller instanceof Component)   
  19.             return controller;   
  20.         return null;   
  21.     }   
  22.       
public class ZkCommonTools {

	/**
	 * 获取spring管理的控制器对象,
	 * <p>
	 * 
	 * 支持的类型为:{@link Composer},{@link Component},{@link FullComposer}
	 * 
	 * @param beanName
	 * @return
	 */
	public static final Object getController(String beanName) {
		Object controller = SpringUtil.getBean(beanName);
		if (controller instanceof Composer)
			return controller;
		else if (controller instanceof FullComposer)
			return controller;
		else if (controller instanceof Component)
			return controller;
		return null;
	}
	

  

 

五,总结

 

首先我们在spring的配置中开启自动扫描

 

Xml代码 复制代码 收藏代码
  1. <!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->  
  2.     <context:component-scan base-package="org.zkway" />  
<!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->
	<context:component-scan base-package="org.zkway" />

 

将controller注册为spring bean

 

Java代码 复制代码 收藏代码
  1. @Controller  
  2. @Scope("prototype")   
  3. public class LoginController extends GenericAutowireComposer {  
@Controller
@Scope("prototype")
public class LoginController extends GenericAutowireComposer {

 

然后我们需要解决的问题是如何获取bean,如果直接apply或use一个类名,

那么类实例由zk创建,我们无法享受spring管理bean给我们带来的任何好处。

 

也许会这么做,就是在forward到一个zul页面前,先将spring bean放在可用作用域(execution,request,session,ThreadLocal),

然后目标页面直接使用el表达式获取${reqeustScope['loginController']},但实际项目中,下一站到底是什么,大多数情况我们是无法预知的,

只有到达目标你才能知道结果,所以预先读取bean很多情况下有他的局限性。

 

在本文中我定义了一个el函数ctrl,这个函数的参数为spring bean名字,el函数的返回值是spring管理的bean事例

 

 

大致流程如下

 

spring scan bean ---> register controller bean ---> el function 获取 spring bean -->zk interpret -

分享到:
评论

相关推荐

    ZK+spring+hibernate的整合

    《ZK+Spring+Hibernate整合详解》 ZK、Spring和Hibernate是Java开发中的三大重要框架,它们分别在用户界面、依赖注入与事务管理、持久层操作方面发挥着关键作用。将这三者进行整合,可以构建出高效、稳定且易于维护...

    zk+spring+hibernate例子

    主要介绍了zk+spring+hibernate的使用方法 早期使用的是 hibernate的配置文件 后来 被改成了 引用注释的方式 老的绑定文件也没有删除,sql下面由数据库文件 导入mysql就可以,不错的教学例子 学习起来很简单

    zk+spring+hibernate整合

    在IT行业中,`ZK`(ZooKeeper)、`Spring`和`Hibernate`都是非常重要的技术组件,分别在分布式协调、应用框架和对象关系映射领域有着广泛应用。本项目是将这三个技术进行整合,用于构建一个基于MySQL数据库的完整...

    zk+spring+hibernate+mysql Demo ()

    使用zk+spring+hibernate+mysql做的demo,只需要修改下MySQL连接字符串就可以运行。因为容量有点大。分卷压缩了,请下全后解压。

    ZK+Spring+Hibernate jar包

    ZK+Spring+Hibernate jar包名稱

    zk+spring+hibernate+mysql demo(2)

    使用zk+spring+hibernate+mysql做的demo,只需要修改下MySQL连接字符串就可以运行。因为容量 有点大。分卷压缩了,请先下载zk+spring+hibernate+mysql demo(),下全后解压。

    zk+spring+hibernate(全部用注解)

    在这个`zk+spring+hibernate(全部用注解)`的项目中,我们将探讨如何完全利用注解来配置和管理这些框架,从而实现更加简洁、高效的代码结构。 `ZK`,全称ZooKeeper,是一个分布式的、开放源码的分布式应用程序协调...

    ZK + Spring + Hibernate

    在名为"SHZ"的压缩包文件中,可能包含了这些整合过程的示例代码、配置文件、教程文档等资源,帮助开发者更好地理解和实践ZK、Spring和Hibernate的整合。通过学习和实践这些内容,开发者可以提升自己的技能,创建出...

    ZK+Spring+Hibernate项目搭建

    本项目采用"ZK+Spring+Hibernate"的技术栈,这是一个常见的Java Web开发组合,旨在提供高效、灵活和可维护的解决方案。下面将详细阐述这三个核心技术及其在项目中的作用。 **ZK框架**: ZK是一个基于组件的Java ...

    zk+spring+hibernate+maven整合项目

    在自个学习zk和其他两个框架整合的时候,总是找不到合适的整合demo进行参考,希望此次上传能对初学者有用,能够给你们一个完整的代码,让你们可以直接把项目运行起来,这样对于开发来说是最重要的

    zk+spring+hibernate增删改查,整合实例,亲测可用

    4. **测试验证**:最后,编写测试用例,确保整合后的系统能够在ZooKeeper的协调下,正常执行Spring+Hibernate的CRUD操作。 这个实例对于理解和掌握分布式环境下基于Spring和Hibernate的业务应用开发非常有帮助,...

    Spring+hibernate+ZK例子

    在"Spring+hibernate+ZK例子"中,可能包含了一个整合这三个技术的应用示例。Spring作为核心框架管理整个应用的生命周期,通过AOP和DI来协调各个组件。Hibernate则被用来处理数据库交互,简化数据存取操作。而ZK可能...

    zk3.5.2+spring2.5+hibernate3.2完整工程

    很多zk初学者对zk与spring和hibernate的整合很头疼,在这花了一晚上的时间整了个完整工程包供大家学习参考,所需jar包很大,都抓成图片了,具体看工程说明. 在遇到zk方面的问题可以加qq群:71714290交流。

    zkoss CE6.0+spring3.0.5+hibernate3.6+oracle10g+mysql5最全包

    这是一个关于企业级应用开发的集成环境包,包含了前端框架ZKoss CE6.0、后端框架Spring3.0.5、ORM框架Hibernate3.6,以及两种数据库Oracle10g和MySQL5。这个组合是早期Java开发中的常见配置,对于理解当时的软件架构...

    [浪曦][原创][A335]Struct+Hibernate+DisplayTag标签+js+Div+css 第1讲(zk原创).rar

    在本课程中,你将学习如何配置Hibernate,创建实体类,以及使用HQL(Hibernate查询语言)进行数据查询和操作。 3. **DisplayTag**: DisplayTag 是一个开源的JSP标签库,主要用于表格展示和复杂的页面布局。它可以...

    zk+jsp实现登录、注册、修改密码小例子

    ZK是一个强大的Java AJAX框架,它简化...通过深入学习和实践,开发者可以进一步了解ZK的高级特性,如Composer、Event Handling、Composer和MVVM模式,以及如何结合其他技术如Spring和MyBatis来构建更复杂的企业级应用。

    spring+springmvc+jpa(hibernate)框架整合

    总的来说,Spring+SpringMVC+JPA(Hibernate)的整合为Java Web应用开发提供了强大的支持,使得我们可以更加专注于业务逻辑,而不是底层的基础设施。这种架构模式在实际项目中广泛应用,能够提高开发效率,降低维护...

    ZK所需jar包

    在ZK、Spring和Hibernate的整合中,Spring通常被用来管理Hibernate的SessionFactory,提供事务管理,并在ZK组件中透明地处理数据访问。 整合这三个框架的过程涉及以下步骤: 1. **设置环境**:确保你有JDK、Maven或...

Global site tag (gtag.js) - Google Analytics