- 浏览: 1148899 次
- 性别:
- 来自: 火星郊区
博客专栏
-
OSGi
浏览量:0
文章分类
- 全部博客 (695)
- 项目管理 (48)
- OSGi (122)
- java (79)
- Vaadin (5)
- RAP (47)
- mysql (40)
- Maven (22)
- SVN (8)
- 孔雀鱼 (10)
- hibernate (9)
- spring (10)
- css (3)
- 年审 (6)
- ant (1)
- jdbc (3)
- FusionCharts (2)
- struts (4)
- 决策分析 (2)
- 生活 (10)
- 架构设计 (5)
- 破解 (2)
- 狼文化 (4)
- JVM (14)
- J2EE (1)
- 应用服务器 (1)
- 我的链接 (5)
- 数学 (2)
- 报表 (1)
- 百科 (6)
- Flex (7)
- log4j (2)
- PHP (1)
- 系统 (2)
- Web前端 (7)
- linux (6)
- Office (1)
- 安全管理 (5)
- python (2)
- dom4j (1)
- 工作流 (3)
- 养生保健 (4)
- Eclipse (8)
- 监控开发 (1)
- 设计 (3)
- CAS (1)
- ZK (41)
- BluePrint (3)
- 工具 (1)
- SWT (7)
- google (2)
- NIO (1)
- 企业文化 (2)
- Windoes (0)
- RCP (7)
- JavaScript (10)
- UML (1)
- 产品经理 (2)
- Velocity (10)
- C (1)
- 单元测试 (1)
- 设计模式 (2)
- 系统分析师 (2)
- 架构 (4)
- 面试 (2)
- 代码走查 (1)
- MongoDB (1)
- 企业流程优化 (1)
- 模式 (1)
- EJB (1)
- Jetty (1)
- Git (13)
- IPV6 (1)
- JQuery (8)
- SSH (1)
- mybatis (10)
- SiteMesh (2)
- JSTL (1)
- veloctiy (1)
- Spring MVC (1)
- struts2 (3)
- Servlet (1)
- 权限管理 (1)
- Java Mina (1)
- java 系统信息 (6)
- OSGi 基础 (3)
- html (1)
- spring--security (6)
- HTML5 (1)
- java爬虫搜索 (1)
- mvc (3)
最新评论
-
Tom.X:
http://osgia.com/
将web容器置于OSGi框架下进行web应用的开发 -
chenyuguxing:
你好, 为什么我的bundle export到felix工程中 ...
在Apache Felix中运行bundle -
string2020:
<niceManifest>true</ni ...
Bundle Plugin for Maven -
jsonmong:
OSGI,是未来的主流,目前已相当成熟。应用OSGI比较好的, ...
基于OSGi的声明式服务 -
zyhui98:
貌似是翻译过来的,有很少人在linux上做开发吧
如何成为“10倍效率”开发者
zk+hibernate+spring零配置
zk5.0.5
hibernate3.6
spring3.05
也许你在使用apply或者use一个类名的或者<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
那么下面的方法对你也许是一种更优雅的方式
一,spring自动扫描注解配置,如果熟悉ss2h,看起来没什么不同
- <?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>
<?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是一个状态对象
- @Controller
- @Scope("prototype")
- public class LoginController extends GenericAutowireComposer {
@Controller @Scope("prototype") public class LoginController extends GenericAutowireComposer {
三,页面中使用ctrl
首先要引入我自定义的el函数库,zktools工具将在下面讲到
<?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的好处了
<window apply="${z:ctrl('loginController')}" width="300px"
完整使用
- <?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("onClick",btnLogin,null);"
- 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("onClick",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 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>
<?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里如何定义的
- <!-- -->
- <!-- 获取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>
<!-- --> <!-- 获取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
- <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>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
- 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;
- }
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的配置中开启自动扫描
- <!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->
- <context:component-scan base-package="org.zkway" />
<!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 --> <context:component-scan base-package="org.zkway" />
将controller注册为spring bean
- @Controller
- @Scope("prototype")
- 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零配置.part1.rar (7 MB)
- 下载次数: 5
- zk_spring_hibernate零配置.part2.rar (7 MB)
- 下载次数: 5
- zk_spring_hibernate零配置.part3.rar (5.2 MB)
- 下载次数: 5
- zktools函数库.rar (4.4 KB)
- 下载次数: 3
- zktools源码.rar (2.4 MB)
- 下载次数: 4
发表评论
-
ZK PPT
2012-02-27 17:28 1200附件中为ZK系列的PPT -
zk+spring+hibernate延迟加载的解决办法
2012-02-24 14:22 1269由于Zk 的AU request,lazy load现在没 ... -
【zk开发】zk注解的秘密
2012-02-24 14:23 1588The DataBinder that reads ZUML ... -
【zk开发】zkstudio安装及使用视屏
2012-02-26 12:04 1238安装视屏 http://docs.zkoss.org/w ... -
zk主题生成器
2012-02-26 12:04 1614生成器在附件内,兼容zk3.x 与zk5.x,zktheme ... -
zk服务器端获取鼠标点击位置
2012-02-26 12:04 1393index.zul Xml代码 ... -
zk Fiddle-zk在线测试保存代码分享平台
2012-02-23 08:20 1467http://zkfiddle.org/ 是zk项目组之一 ... -
zksample2-一个复杂应用的zk示例
2012-02-23 08:19 1480Zks ample2 is a demo applica ... -
zk5.0.8发布
2012-02-23 08:18 953该版本是一个维护版本,主要于bug修复及引入几个新特性 ... -
zk数据绑定
2012-02-23 08:17 1795简介 : 关于数据绑 ... -
zk EE/PE/CE的区别
2012-02-18 09:32 3100自从zk5.0以后,zk拆分为 ... -
ZK 5.0.8 新特性
2012-02-18 09:32 18918月16日,zk官网:zk5.0.8将要发布 zk5. ... -
zk client与server code结合提高长操作的响应性
2012-02-18 09:32 1430一,关于长操作与响应性 zk client与serve ... -
zk tooltiptext中换行
2012-02-17 11:37 1535Xml代码 <window ti ... -
zk下载文件中文乱码解决方案
2012-02-17 11:37 3666本文来自http://sun4love.iteye.com/b ... -
【zk视频】如何了解一个组件默认支持服务器端事件
2012-02-17 11:37 1306如何了解一个组件默认支持服务器端事件? 知识点:在z ... -
【zk视频】如何查看zk源码,了解zk原理
2012-02-17 11:37 1646当org.zkoss.zul.Window关闭时,zk是如 ... -
ZK 5.0.7发布,及新特性
2012-02-15 09:10 1147ZK 是一套以 AJAX/XUL/Java 为基础的网页应用 ... -
use【组件公共属性】
2012-02-15 09:09 1084语法 apply="a-class- ... -
zk异步请求异常,自定义错误页面的bug
2012-02-15 09:09 1126zk版本5.0.6 现在遇到一个问题,觉得是bug, ...
相关推荐
《ZK+Spring+Hibernate整合详解》 ZK、Spring和Hibernate是Java开发中的三大重要框架,它们分别在用户界面、依赖注入与事务管理、持久层操作方面发挥着关键作用。将这三者进行整合,可以构建出高效、稳定且易于维护...
主要介绍了zk+spring+hibernate的使用方法 早期使用的是 hibernate的配置文件 后来 被改成了 引用注释的方式 老的绑定文件也没有删除,sql下面由数据库文件 导入mysql就可以,不错的教学例子 学习起来很简单
在IT行业中,`ZK`(ZooKeeper)、`Spring`和`Hibernate`都是非常重要的技术组件,分别在分布式协调、应用框架和对象关系映射领域有着广泛应用。本项目是将这三个技术进行整合,用于构建一个基于MySQL数据库的完整...
使用zk+spring+hibernate+mysql做的demo,只需要修改下MySQL连接字符串就可以运行。因为容量有点大。分卷压缩了,请下全后解压。
ZK+Spring+Hibernate jar包名稱
使用zk+spring+hibernate+mysql做的demo,只需要修改下MySQL连接字符串就可以运行。因为容量 有点大。分卷压缩了,请先下载zk+spring+hibernate+mysql demo(),下全后解压。
在这个`zk+spring+hibernate(全部用注解)`的项目中,我们将探讨如何完全利用注解来配置和管理这些框架,从而实现更加简洁、高效的代码结构。 `ZK`,全称ZooKeeper,是一个分布式的、开放源码的分布式应用程序协调...
在名为"SHZ"的压缩包文件中,可能包含了这些整合过程的示例代码、配置文件、教程文档等资源,帮助开发者更好地理解和实践ZK、Spring和Hibernate的整合。通过学习和实践这些内容,开发者可以提升自己的技能,创建出...
本项目采用"ZK+Spring+Hibernate"的技术栈,这是一个常见的Java Web开发组合,旨在提供高效、灵活和可维护的解决方案。下面将详细阐述这三个核心技术及其在项目中的作用。 **ZK框架**: ZK是一个基于组件的Java ...
在自个学习zk和其他两个框架整合的时候,总是找不到合适的整合demo进行参考,希望此次上传能对初学者有用,能够给你们一个完整的代码,让你们可以直接把项目运行起来,这样对于开发来说是最重要的
4. **测试验证**:最后,编写测试用例,确保整合后的系统能够在ZooKeeper的协调下,正常执行Spring+Hibernate的CRUD操作。 这个实例对于理解和掌握分布式环境下基于Spring和Hibernate的业务应用开发非常有帮助,...
在"Spring+hibernate+ZK例子"中,可能包含了一个整合这三个技术的应用示例。Spring作为核心框架管理整个应用的生命周期,通过AOP和DI来协调各个组件。Hibernate则被用来处理数据库交互,简化数据存取操作。而ZK可能...
很多zk初学者对zk与spring和hibernate的整合很头疼,在这花了一晚上的时间整了个完整工程包供大家学习参考,所需jar包很大,都抓成图片了,具体看工程说明. 在遇到zk方面的问题可以加qq群:71714290交流。
这是一个关于企业级应用开发的集成环境包,包含了前端框架ZKoss CE6.0、后端框架Spring3.0.5、ORM框架Hibernate3.6,以及两种数据库Oracle10g和MySQL5。这个组合是早期Java开发中的常见配置,对于理解当时的软件架构...
在本课程中,你将学习如何配置Hibernate,创建实体类,以及使用HQL(Hibernate查询语言)进行数据查询和操作。 3. **DisplayTag**: DisplayTag 是一个开源的JSP标签库,主要用于表格展示和复杂的页面布局。它可以...
ZK是一个强大的Java AJAX框架,它简化...通过深入学习和实践,开发者可以进一步了解ZK的高级特性,如Composer、Event Handling、Composer和MVVM模式,以及如何结合其他技术如Spring和MyBatis来构建更复杂的企业级应用。
总的来说,Spring+SpringMVC+JPA(Hibernate)的整合为Java Web应用开发提供了强大的支持,使得我们可以更加专注于业务逻辑,而不是底层的基础设施。这种架构模式在实际项目中广泛应用,能够提高开发效率,降低维护...
在ZK、Spring和Hibernate的整合中,Spring通常被用来管理Hibernate的SessionFactory,提供事务管理,并在ZK组件中透明地处理数据访问。 整合这三个框架的过程涉及以下步骤: 1. **设置环境**:确保你有JDK、Maven或...