品味 ring的魅力

文章作者 100test 发表时间 2007:09:06 11:53:20
来源 100Test.Com百考试题网


  Spring的哲学是在不影响Java对象的设计的情况下将Java对象加入到框架中。

  EJB的框架采用了一种侵略性(Invasive)的方法来设计对象,它要求你在设计中加入符合EJB规范的代码。一些轻量级的COP框架,例如Avalon,也要求对象设计时必须符合某种规范,例如Serviceable接口,这种做法是典型的Type 1做法。

  这种设计思路要求Spring采用一种动态的、灵活的方式来设计框架。所以spring大量采用了反射。首先spring要解决的一个问题就是如何管理bean。因为IOC的思想要求bean之间不能够直接调用,而应该采用一种被动的方式进行协作。所以bean的管理是spring中的核心部分。

  反射和内省在代码的层次上思考问题,有时候能够带来出人意料的灵活性。但它的使用有时候也是一个哲学问题,不论是在ORM设计还是在AOP设计上都出现了类似的问题-究竟是使用反射,还是使用代码生成。

  在Spring中,处理这个问题的核心是在org.springframework.beans包中。而其中最为核心的部分,则是BeanWrapper。BeanWrapper,顾名思义,就是bean的包装器。所以,它的主要工作,就是对任何一个bean,进行属性(包括内嵌属性)的设置和方法的调用。在BeanWrapper的默认实现类BeanWrapperImpl中,虽然代码较长,但完成的工作却是非常的集中的。

  BeanWrapper的深入研究

  我们看看这个BeanWrapper是如何发挥运作的,假设我们有两个bean:

public class Company {
 private String name.
 private Employee managingDirector.

 public String getName() {
  return this.name.
 }
 public void setName(String name) {
  this.name = name.
 }
 public Employee getManagingDirector() {
  return this.managingDirector.
 }
 public void setManagingDirector(Employee managingDirector) {
  this.managingDirector = managingDirector.
 }
}

public class Employee {
 private float salary.

 public float getSalary() {
  return salary.
 }
 public void setSalary(float salary) {
  this.salary = salary.
 }
}

  然后我们使用BeanWrapper来调用这两个bean:

Company c = new Company().
BeanWrapper bwComp = BeanWrapperImpl(c).
// setting the company name...
bwComp.setPropertyValue("name", "Some Company Inc.").
// ... can also be done like this:
PropertyValue v = new PropertyValue("name", "Some Company Inc.").
bwComp.setPropertyValue(v).

// ok, lets create the director and tie it to the company:
Employee jim = new Employee().
BeanWrapper bwJim = BeanWrapperImpl(jim).
bwJim.setPropertyValue("name", "Jim Stravinsky").
bwComp.setPropertyValue("managingDirector", jim).

// retrieving the salary of the managingDirector through the company
Float salary = (Float)bwComp.getPropertyValue("managingDirector.salary").


  看起来麻烦了许多,但是这样spring就可以使用统一的方式来管理bean的属性了。


相关文章


强强携手将AJAX带入Ecli e
JavaSE6基于JSR105的XML签名之理论篇
J 和JSF双剑合并打造完美Web应用
JDK6.0新特性:用Co ole开发控制台程序
品味 ring的魅力
基于Struts和Hibenate的发布系统研究
企业JavaBean(EJB)3.0全新体验
在Weblogic上配置Hibernate为JNDI
Acegi框架技术详细介绍
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛