- 浏览: 1435033 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
luhouxiang:
写的很不错,学习了
Extjs 模块化动态加载js实践 -
kingkongtown:
如果想改成淘宝后台那样,可以在编辑器批量上传图片呢?
kissy editor 阶段体会 -
317966578:
兄弟我最近也在整jquery和caja 开放一些接口。在git ...
caja 原理 : 前端 -
liuweihug:
Javascript引擎单线程机制及setTimeout执行原 ...
setTimeout ,xhr,event 线程问题 -
辽主临轩:
怎么能让浏览器不进入 文档模式的quirks模式,进入标准的
浏览器模式与文本模式
以前很忽视 javabean ,除了写写简单的 get,set 很少用到其他,近来探索 attribute 中,回头再看 javabean 突然觉得很相似,或许 yui3 attribute正是受到了 javabean component model 的影响而产生?
PS : 这里说的不是 EJB ,from core java 2:
We'd like to address a common confusion before going any further: The JavaBeans that we discuss in this chapter have little in common with "Enterprise JavaBeans " or EJB. Enterprise JavaBeans are server-side components with support for transactions, persistence, replication, and security. At a very basic level, they too are components that can be manipulated in builder tools. However, the Enterprise JavaBeans technology is quite a bit more complex than the "Standard Edition" JavaBeans technology.
That does not mean that standard JavaBeans components are limited to client-side programming. Web technologies such as JavaServer Faces (JSF) and JavaServer Pages (JSP) rely heavily on the JavaBeans component model.
1.getter ? setter?
不像 C# 可以对属性定义 getter,setter 后以后就可以直接对属性访问进行控制,java 中还是传统的使用属性访问方法,没有提供直接访问属性控制的机制,同目前广泛实现的 ecmascript3 类似,所以 yui3 attribute 也等于是模拟了 java ,提供了 getter ,setter 用方法来控制属性访问,并类似java,c#将属性元定义定义在了 javascript 类(构造器)中,javabean getter,setter则是语言级别提供了:
public class TestAttr extends Attribute { private String test = "5"; public String getTest() { System.out.println("i am reading ..."); return test; } public void setTest(String test) { System.out.println("i am writing"); this.test = test; } }
另一方面当使用继承时,java 语言层次保证了继承链上的属性初始化,而 yui3 attribute 则通过 Base 模拟了该初始化。
2. 属性变化事件的触发
yui3 attribute 通过set 封装,在设置内部属性值前后,要触发before以及after事件,并且可以通过before事件来阻止属性的真正有效写入,而javabean component model 则直接提供了 PropertyChangeSupport (用于写后通知) 与 VetoableChangeSupport (用于阻止),只不过需要在setter中手动调用,其实由于java存在反射机制,我们也可以很容易的模拟 yui3 attribute 的 set 封装:(用 beanutils 更方便)
public class Attribute { private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); private VetoableChangeSupport vetoSupport = new VetoableChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(listener); } public void addVetoableChangeListener(VetoableChangeListener listener) { vetoSupport.addVetoableChangeListener(listener); } public void removeVetoableChangeListener(VetoableChangeListener listener) { vetoSupport.removeVetoableChangeListener(listener); } public void set(String name, Object newValue) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, PropertyVetoException { Object oldValue = BeanUtils.getProperty(this, name); vetoSupport.fireVetoableChange(name, oldValue, newValue); BeanUtils.setProperty(this, name, newValue); changeSupport.firePropertyChange(name, oldValue, newValue); } }
3.测试
一个很简单的例子即可验证该模式同 yui3 attribute 的相似性:
public static void main(String[] args) throws InvocationTargetException, PropertyVetoException, NoSuchMethodException, IllegalAccessException { TestAttr t = new TestAttr(); t.addVetoableChangeListener(new VetoableChangeListener() { //属性真正设置前调用 public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException { System.out.println(evt.getNewValue()); System.out.println(evt.getOldValue()); //如果验证失败,就throw //throw new PropertyVetoException("",null); } }); t.addPropertyChangeListener(new PropertyChangeListener() { //属性设置后通知 public void propertyChange(PropertyChangeEvent evt) { System.out.println(evt.getNewValue()); System.out.println(evt.getOldValue()); } }); //System.out.println(t.getTest()); t.set("test", 2); //System.out.println(t.getTest()); }
PS:
IE9 不再支持 __defineGetter__,转而支持 ES5 API , Link MSDN
发表评论
-
continuation, cps
2013-09-12 16:49 2723起 随着 nodejs 的兴起,异步编程成为一种潮流 ... -
using mustache with spring mvc
2011-06-16 20:30 4667spring 基本不用介绍了,是目前最好的 IOC 容器了 ... -
备忘:使用 intellij idea 进行远程调试
2011-05-03 18:56 33549以前都是很土得打 log ,发现一篇关于 java 调试器架构 ... -
前后端编码传递
2010-10-21 00:12 1991背景: 关于编码是 BS 的开发是个大问题,包 ... -
JAVA学习路线图
2010-06-20 23:24 0最近论坛上看到好几个朋友都在问,如何学习 Java的问题, ... -
linux下定位java应用
2010-06-09 02:48 1385场景: java 应用不同于其它程序,在ps查看时程 ... -
java中的协变
2010-05-27 23:17 3316一个一直有点模糊的概念,记录一下,协变是指一个类型随着它关联的 ... -
验证码图片生成
2010-04-29 22:15 0<%@ page contentType="i ... -
利用aop重构数据访问层
2010-02-24 20:57 2065由于一直以来小项目做的多,造成了轻后端重前端的恶果,结果后端现 ... -
struts2讲义
2009-11-07 11:53 0struts2讲义 -
xml transfer for beyond compare
2009-10-22 17:33 0xml transfer for beyond compare ... -
Digester 空白保留问题
2009-10-17 16:40 1928Digester 详细介绍 : apach ... -
Jsp - pageEncoding 解析
2009-09-29 22:28 2406pageEncoding 作为 Jsp page 指令 ... -
图解JVM在内存中申请对象及垃圾回收流程
2009-09-15 20:33 0http://longdick.ite ... -
javarebel
2009-09-11 22:23 0使用JavaRebel实现即时重载javaclass更改 ... -
mac java web开发配置备忘
2009-09-05 17:02 89基本上和linux配置差不多,mac 可算兼具 linux 命 ... -
10个让我去寻找比Java更好的语言的理由
2009-08-26 13:02 0别误会我. 在我的职业生涯中我写了无数的Java代码,我当 ... -
生僻用法:finally and return
2009-08-26 12:55 1458本质上还是 reference 与 primitive val ... -
事件人工详情整理Pattern
2009-08-09 16:13 0事件人工详情整理Pattern -
VJO 简要学习笔记
2009-07-16 18:47 2414VJO 简单来说是一套ebay (已经在java这 ...
相关推荐
用xmlbean和xmlstream进行xml和javabean的转换案例
jsp:attribute 设置动态定义的XML元素属性 jsp:body 设置动态定义的XML元素内容 jsp:text 在JSP页面和文档中使用写入文本的模板 在JSP页面中,为了把其他资源的输出内容插入到当前JSP页面的输出内容中,JSP技术提供...
5-1 属性( Attribute ) 与范围( Scope ) 5-2 与 Servlet 有关的隐含对象 5-3 与 Input / Output 有关的隐含对象 5-4 与 Context 有关的隐含对象 5-5 与 Error 有关的隐含对象 第六章 Expression Language 6-1 EL ...
JavaBean是一個純綷的Java類別,它遵守一些規則與命名方式,它是一個公開(public)的類別,具有公開的setter與getter方法,在JSP中可以使用它將程式的邏輯處理與呈現部份分離。 簡介 JavaBean 深入 JavaBean ...
第13章 jsp与javabean 409 13.1 javabean简介 409 13.1.1 属性的命名 409 13.1.2 属性的类型 411 13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:...
第13章 jsp与javabean 409 13.1 javabean简介 409 13.1.1 属性的命名 409 13.1.2 属性的类型 411 13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:...
第13章 jsp与javabean 409 13.1 javabean简介 409 13.1.1 属性的命名 409 13.1.2 属性的类型 411 13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:...
第13章 jsp与javabean 409 13.1 javabean简介 409 13.1.1 属性的命名 409 13.1.2 属性的类型 411 13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:...
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。...
1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是...
RegUserForm "/> </form-beans> <br/><action-mappings><br/><action path="/regUserAction"<br/> type=" org.cjea.Struts.example.RegUserAction " attribute=" regUserForm " scope="request...
1. 介绍.........................................................................................................18 1.1. 关于本书..........................................................................
1. 介绍.........................................................................................................18 1.1. 关于本书...........................................................................