做个简单的例子,来验证第一点:所有在 Spring 中定义的 Bean,都能够被当成 AOM 中的 LiteBean 直接使用。
首先将 Spring 等相关 jar 包部署到 WEB-INF/lib 目录中,然后在web.xml中增加以下内容(这都是 Spring 的相关知识):
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
再在 WEB-INF 中放一个 applicationContext.xml 文件,其内容及详细注释如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
<!-- Attention:this bean is essential!
Making LiteBeans available in Spring container. -->
<bean class="org.operamasks.faces.spring.ManagedBeanConfigurer"/>
<!-- Attention: this bean is recommended!
Config the apusic application server transaction manager as the Spring transaction manager -->
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName">
<value>java:/TransactionManager</value>
</property>
</bean>
<!-- This is a sample bean -->
<bean id="MySpringBean" class="demo.MySpringBean" scope="session">
<property name="name" value="Kevin"/>
</bean>
</beans>
请注意:上面的 org.operamasks.faces.spring.ManagedBeanConfigurer是 AOM 默认提供的一个 Spring Bean 定义,必须在Spring中配置此Bean,它的作用是:让 AOM 中的 LiteBean 同样能够被 Spring 所感应到。同时,如果你使用 Apusic 应用服务器,我们还建议你正确配置 Apusic 应用服务器的 TransactionManager。
将我们的注意力回到 MySpringBean 的定义上,以下是示例性代码:
public class MySpringBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String sayHello() {
System.out.println("hello " + name);
return null;
}
@Override
public String toString() {
return "MySpringBean";
}
}
我们再准备一个 mySpring.xhtml的faces page:
<f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
xmlns:w="http://www.apusic.com/jsf/widget" xmlns:layout="http://www.apusic.com/jsf/layout"
renderKitId="AJAX">
<w:page title="spring">
<w:form>
<layout:panelGrid columns="2">
<w:textField value="#{MySpringBean.name}" />
<w:button value="sayHello" action="#{MySpringBean.sayHello}" />
</layout:panelGrid>
</w:form>
</w:page>
</f:view>
此页面的运行效果如下:
我们可以看到,<w:textField>能够正常显示name属性,并且,当我们点击 sayHello 按钮时,程序也可以正常运行。由此可见:在 AOM 中,是可以把一个 Spring Bean 当成 LiteBean 来使用的。
再来验证第二点:所有在 AOM 中定义的 LiteBean,都能够被当成 Spring 中的 Bean 直接使用。
首先声明一个LiteBean:
@ManagedBean(scope=ManagedBeanScope.SESSION)
public class MyLiteBean {
@Override
public String toString() {
return "MyLiteBean";
}
}
然后再写一个 jsp 页面测试一下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="org.springframework.web.context.WebApplicationContext"%>
<%@page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%@page import="demo.MyLiteBean"%>
<%@page import="demo.MySpringBean"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>spring test</title>
</head>
<body>
<%
WebApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());
MySpringBean mySpringBean = (MySpringBean) appContext.getBean("MySpringBean");
out.print("The bean defined in Spring: " + mySpringBean);
out.print("<br/>");
MyLiteBean myLiteBean = (MyLiteBean) appContext.getBean("MyLiteBean");
out.print("The bean defined in AOM: " + myLiteBean);
%>
</body>
</html>
此页面的运行效果如下:
由此可见,在 AOM 中定义的 LiteBean,在 Spring 容器中是同样可见的。
最后再来验证第三点:在 Spring 中定义的 Bean,同样能够获得 IoVC 的支持。
首先,根据“约定优于配置”原则,mySpring.xhtml页面是可以自动找到 MySpringBean 的,那么,我们将 MySpringBean 修订成这样:
public class MySpringBean {
@Bind
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Action
public String sayHello() {
System.out.println("hello " + name);
return null;
}
@Override
public String toString() {
return "MySpringBean";
}
}
然后再将 mySpring.xhtml 修订成如下示例:
<f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
xmlns:w="http://www.apusic.com/jsf/widget" xmlns:layout="http://www.apusic.com/jsf/layout"
renderKitId="AJAX">
<w:page title="spring">
<w:form>
<layout:panelGrid columns="2">
<w:textField id="name"/>
<w:button id="sayHello"/>
</layout:panelGrid>
</w:form>
</w:page>
</f:view>
页面执行效果如下:
页面可以正常显示及运行,由此可见:在Spring中定义的Bean,其IoVC能力依然得以保留。
最后,再看一下基于IoVC思想下的 mySpring.xhtml 的源码,忍不住再赞一下:)
相关推荐
--enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --...
--enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --...
这种架构将AOM、Spring和Hibernate三个技术框架集成在一起,以提供一个完整的架构,以满足快速开发和部署企业级应用程序的需求。 六、AOM-Spring-Hibernate架构的优点 AOM-Spring-Hibernate架构的优点在于它提供了...
README.md {#LREADME} AV1编解码器库 内容 构建库和应用程序{#building-the-library-and-applications} 先决条件{#prerequisites} ... $ git clone https://aomedia.googlesource.com/aom # By default,
AOMedia(简称AOM)是一个开放源代码的多媒体开发项目,由互联网巨头Google托管在它的开源仓库中。这个项目的主要目标是推动下一代视频编码标准的发展,旨在提高视频编码效率,降低带宽需求,同时保持高质量的视觉...
使用QTP的automation object model,可以对QTP进行自动化编程,从而自动对QTP进行选项设置、自动运行测试(或组件),而无需使用QTP界面手工进行这些操作。 如果要重复多次的完成同一项工作任务,或重复多次运行同一...
标题"AOM初体验(一)"以及描述中提到的工程打包下载,暗示了这是一个关于应用开发和集成环境的讨论,特别是涉及到AOM(可能是Apusic Application Object Model,一种中间件平台)的使用。标签"源码"和"工具"进一步...
AOM 通过engine.vbs 启动UFT。
标题"AOM相关.rar"指的是与AOMedia(简称AOM)相关的资料集合,这通常涉及到音视频编码技术,特别是AV1编码标准。AOMedia是一个开放的非营利组织,致力于开发下一代开源、免专利费的媒体编码技术,旨在提供高质量的...
在这个过程中,`aom-v1.0.0.errata.1.tar.gz`是一个重要的组件,它是Google开放媒体联盟(Alliance for Open Media, AOMedia)的AV1编码器开源实现——AOMedia Video 1(AV1)的一个版本。AV1是一种高效、开放标准的...
标题 "aom-v1.0.0.errata.1.tar.gz" 指的是一个名为 "aom" 的开源项目,其版本为1.0.0的错误修复更新(errata)第一版,并以tar.gz格式打包。这个压缩包包含了项目的一些核心文件和文档,表明这可能是用于开发或维护...
AOM(Academy of Motion Picture Arts and Sciences)是一个与电影技术相关的组织,而在此上下文中,它似乎指的是一个特定的Java项目或库。"AOM java原代码下载"的标题表明我们正在讨论的是该组织的Java源代码,可能...
什么是 AoM? AoM 是 Argentum Online 的改装平台。 阅读有关 AoM 的更多信息版权所有 (c) 2015 AoM Powered 执照AoM 在下获得 ,请参阅LICENSE文件了解详细信息。贡献AoM 是 100% 免费和开源的。 我们鼓励并支持...
各位AOM的爱好者,AOM目前采用的默认EXT皮肤很漂亮,但是从1.0用到2.0再用到2.3,想必各位的项目都已经成熟稳定了,这时候很多人想锦上添花,让自己的项目更加出众一些,那就要在外观上做一些美化了。 遗憾的是,...
README.md {#LREADME}AV1编解码器库内容构建库和应用程序{...获取代码{#get-the-code} AV1库的源代码存储在Alliance for Open Media Git存储库中: $ git clone https://aomedia.googlesource.com/aom # By default, t
NotEnoughAV1编码NEAV1E是用于AV1编码器的Windows GUI-aomenc,rav1e,svt-av1和vp9。签出Linux PyQt5端口: 它是使AV1编码器的编码更快,更轻松的工具... 与我联络您可以在非官方的AV1 Discord或NEAV1E Discord上找到
标题 "aom-v1.0.0.errata.1.zip" 指示这是一个与开源视频编码库AV1相关的更新或修正文件。"errata"通常用于标识软件发布中的错误或修正,这意味着这个压缩包可能包含了针对aomedia(aom)v1.0.0版本的一些修复或改进...
本文将深入探讨“第二波又来了:AOM3.2之8款皮肤分享(for extjs3.31)”这个主题,这是一次针对AOM(Opera Masks)3.2版本发布的皮肤更新,特别设计以兼容ExtJS 3.3.1框架。 AOM,全称Antelope on the Moon,是一个...
标题中的"EJBGL.zip_ejb_kingdee_凭证"表明这是一个与企业级JavaBean(EJB)相关的项目,特别地,它与金蝶(Kingdee)的凭证管理有关。EJB是Java平台企业版(Java EE)的一部分,用于构建可扩展、安全且事务性的...