JavaBean构建

JavaBean就是一个可生用的构件,并可在开发工具中,如Netbeans中进行可视化的操作,与VB的可视化拖拽操作类似.有时候我们也会在jsp中使用简化的JavaBean.在Netbeans中使用时, 一般需要打包成Jar文件,并在清单中注明,尽量不要使用缺省包名.有时空格换行什么的会影响Bean的加载.
Name: com/qp/Abean.class
java-Bean: True
JSP中就是最常见的<jsp:useBean>

JavaBean有一些规范,如存在缺省的构造函数,对属性使用get/set方法,定义事件/动作方法.

对于Javabean而言并没有必须的特殊技术,接口.对于可视化组件需要继承(J)Component, 非可视化bean则不需要.

属性的设置与读取命名方法为setXXX/getXXX/isXXX.
事件为(add|remove)EventNameListener(EventNameListener e), awt/Swing的组件大多为Javabean.

属性可以分为四类:
简单属性(如基本类型/字符串)
索引属性(数组),命名规范为
   Type[] getPropertyName();
   void     setPropertyName(Type[] nv)
   Type     getPropertyName(int i);
   void     setPropertyName(int i,Type nv)
 
绑定属性.当属性值变化时,通知所有相关的监听器.实现方法
1.属性发生了变化,发送一个PropertyChange事件,经常是在setXX方法中.
2.为了使感兴趣的监听器能够注册,Bean需要实现以下两个方法.
   (add|remove)PropertyChangeListener(PropertyChangeListener l)方法.

java.beans包中有一个实用类,PropertyChangeSupport可以帮助管理监听器.

如果是可视化bean,由于Component已经存在注册监听器的方法,所以不必在自己实现了.

约束属性,即任何监听器都可以否决所提出的改变.强迫其还原旧的值. 实现方法:
   bean中包含两个方法add|removeVetoableChangeList ener(VetoableChangeListener); 还有getVetoxxxx().
为了管理器,VetoableChangeSupport可以方便功能.

public void setValue(Type newValue) throws PropertyVetoException{
       Type oldValue=getValue();
       vetoSupport.fireVetoableChange("value",oldValue,newValue);
       //survived,no veto
       value=newValue;
       changeSupport.firePropertyChange("value",oldValue,newValue);
}

开发工具缺省通过反射确定bean的属性和事件,所以bean的实现需要符合规范. 当然也可以提供一个信息类,以明确告诉开发工具自身的属性和事件.
如果需要更灵活的方式来描述有送Bean的信息,可以定义定义一个实现BeanInfo接口的对象,信息类的名字必须是BeanName+BeanInfo. 与BeanInfo接口对应的有一个抽象类,SimpleBeanInfo.其中的getIcon方法可以定义出现在可视化开发工具中显示的图标.

并不是一旦有了BeanInfo就不会自动反射以获得bean属性即事件了,BeanInfo有对应的获取属性和事件的方法,如果返回为null,那么标准命名模式的反射将会派上用场. 具体可参见Introspector源码.集成开发工具即使用此类获得beaninfo.

Introspector可以用于得到javabean的元数据.
  BeanInfo info = Introspector.getBeanInfo( SimpleBean.class ); 此方法会缓存beaninfo,以在下次调用中, 不再执行反射方法.

属性编辑器,这是指在开发工具中如何指定属性,如Color属性,当然我们可以指定的rgb值,但更好的方法是调用一个颜色选择面板.
 
属性编辑器必须提供缺省的构造器,并实现PropertyEditor接口.但通常我们会使用PropertyEditorSupport抽象类.

getAsText/setAsText方法定义了以字符串形式设置或读取属性的方法.

如果需要图形化处理属性,可以让isPaintable()返回true,使用 paintValue 显示属性值.

指定PropertyEditor可以使用以下方法.
1.BeanInfo. PropertyDescriptor.setPropertyEditorClass(TitleEditor.class);
2.java.beans.PropertyEditorManager.registerEditor(..)
3.PropertyEditorManager   自动查找CustomPropertyClassEdito r作为CustomPropertyClass类型属性的编辑器.

JavaBean的序列化, 使用Java中普通的对象序列化,但是普通对象序列化由于版本问题是不适合长期存储的.使用此方法的javabean必须实现Serialiable或Externaliable接口.
java.beans.Beans.getInstanceOf(...)就是得到给定类的一个实例.但与new,反射等方法不同的是, 它会先查找给定类名.ser资源文件,如果有的话, 则直接反序列化它而生成实例,如果没有,则通过反射生成实例.   这个ser文件则是对javabean实例的序列化得到的原型bean(prototype bean).   这种机制常用于自定义类,   如一个标签Label, 以此可以序列化为红色的,黄色的ser文件, 则此后可直接生成对应的实例,由此getInstanceOf()方法并不一定是传入类名, 故声明中叫做beanName.

JavaBean也可以通过xml来存储的,其一般只是用于记录bean的属性. 可由此保存和重建开发工具中设计的UI界面.此适合长期化存储,而不必担心javaBean的版本变化.
如new XMLEncoder(new FileOutputStream(..)).writeObject(new JFrame);

XMLDecoder.readObject();

由于XMLEncoder无法处理内部类,所以必须使用EventHandler构建动作.
loadButton.addActionListener(EventHandler.create(ActionListener.class,this,"load"));

XML序列器缺省情况下并不能处理不太规范的bean,如没有对应的set方法的bean.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
博客地址:http://blog.csdn.net/vipbooks 一直以来把数据库的表转换成Entity或DTO都是一件让人头痛的事情,既浪费时间又很繁琐,看着几十上百个表的几百上千个字段,真是一件让人很头痛的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括表和表字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,支持精确指定只生成哪几个表的Bean,也支持模糊查找生成哪几个表的Bean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有备注了! 更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现秒生成。并且集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆表! 第12版更新震撼发布,此次版本更新如下: 1、新增参数配置管理功能,可以为不同的项目配置不同的参数。 2、新增快速新增参数配置功能,快速为项目添加参数配置。 3、新增选择实体注解功能,生成实体的时候自动为实体添加额外的注解。 4、弹出对话框界面大小调整。 5、新增数据源添加默认设置。 6、精确匹配在点更多时,已选中的表会在弹出的列表中被勾选中。 7、修复模糊匹配找不到表的Bug。 8、其他一些小Bug的修改和代码优化调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值