分享
 
 
 

我来说说Bean的使用方法

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

最近讨论主要围绕在公共构造函数以及工厂模式身上。我在此分贴,说说我对 Bean的看法。因为最近项目使用到了webwork,spring,hibernate。我主要结合这些框架来谈谈我个人对pojo bean的认识。

bean的规范使得对象属性填充得到动态支持,Bean的规范使得对象图的建立非常清晰。OGNL正是基于此实现。

在对bean属性赋值 与 bean的定义之间插入一个中间层OGNL,得到最大限度的灵活。我们举一个比较极端但确实经常发生的例子(顺带狠狠批一下Struts)。

java代码:

1

2

// 持久层entity:

3

public class BeanA{

...}

4

private String name;

5

private int number;

6

public BeanA(){

...}

7

}

8

public String getName(){

...}

9return name;

10

}

11

public void setName(String name){

...}

12

this.name=name;

13

}

14

public int getNumber(){

...}

15

return number;

16

}

17

public void setNumber(int num){

...}

18

number=num;

19

}

20 }

21

22 //视图层form:

23 Struts:

24 public class BeanAForm{

...}

25

private String name;

26

private String number;

27

public BeanA(){

...}

28

}

29

public String getName(){

...}

30

return name;

31

}

32

public void setName(String name){

...}

33

this.name=name;

34

}

35

public String getNumber(){

...}

36

return number;

37

}

38

public void setNumber(String num){

...}

39

number=num;

40

}

41 }

42

struts通过form定义利用bean的特性达到form的自动填充,然后通过beanutil将form转到entity或者DTO。

某天,客户觉得需要修改entity,增多一个字段bar,struts的做法是修改form,修改entity,修改配置文件的form定义,修改客户端jsp文件等等,然后编译通过,update database schema。

webwork的做法就非常简单了,在open session in filter模式下,只需改动

entity的定义即可,ognl将所有的问题变得简单得可怕。

OGNL完全将客户端到服务器端的参数传递代理了,只要你在你的action定义相应的name setter,ognl自动识别到这个setter,自动将参数传递进来。

对于多层关联的情况,最极端的如下:

java代码:

1

2

public class A{

...}

3

private B b;

4

//getter

5

//setter

6

};

7

public class B{

...}

8

private C c;

9

//getter setter

10 };

11 public class C{

...}

12

String name;

13

14 };

你在视图层只暴露了A对象,而需要通过form修改C对象的值,这种情况在struts我不知道它怎么实现,但是在webwork下,依赖OGNL,您要做的仅仅写下这么一句:name="a.b.c.name" 。Ognl自动将name的值填充到c的属性。

讨论了这么多,回过头来看,是什么东西使得我们web开发变得简单了呢?是OGNL,那么OGNL为什么这么强大呢?因为OGNL是基于Bean的对象图寻找方式!!

到这里,我们看到了Bean是一切的基础,没有bean就没有OGNL。

同样,看看IoC容器,一样的道理,没有Bean就没有IoC容器的实现。如果采用bean的格式定义你的组件, 那么意味着你的组件是可装配的,如果采用bean定义的entity,意味着你的entity是可以自动填充的。

现在评价一个软件好坏,可装配性是一个重要目标。假设一个较复杂得系统,我们分析一下它的运作:

A系统由 子系统C 子系统B 构成,子系统C 由C1,C2,C3等等服务组件构成,每个服务组件又需要调用多个基本服务类来协作。子系统B同样构架。

系统启动过程:

bootrap启动服务守护引擎,引擎读取配置文件,相关初始化。

服务过程:

一个请求上来,守护引擎根据请求映射,需要调用C子系统的服务接口,C子系统的服务接口未装载,请求beanfactory装载C子系统的服务接口,beanfactory读取C系统接口配置,发现这个接口具体实现类,以及这个具体实现类需要到的C1,C2,C3组件,又根据引用读取C1等的配置信息,知道最后的服务类是最简单的POJO bean。逐一初始化所有需要用到的类,然后调用已经实例化的接口,完成服务。

改动过程:

C1,C2组件需要改善功能,增加C4,C5组件。写代码,编译打包,修改配置文件,发布。

服务过程如上

这个系统是完全可插入的,因为它所有的服务过程都是基于组件的,组件是可装配的。试想一下,如果其中的C1或者C2不是Bean格式,也就是说没有公开构造器,那么这一切优雅的实现就断节了,就算要实现这么一个类似的实现,也要需要花费大量的精力物力来填补构造器的模式。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有