程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 品味Spring 的魅力

品味Spring 的魅力

編輯:JAVA編程入門知識
  Spring的哲學是在不影響Java對象的設計的情況下將Java對象加入到框架中。
  
   <!-- frame contents --> <!-- /frame contents -->   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, let's 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的屬性了。 Bean的制造工廠
  
  有了對單個Bean的包裝,還需要對多個的bean進行治理。在spring中,把bean納入到一個核心庫中進行治理。bean的生產有兩種方法:一種是一個bean產生多個實例,一種是一個bean只產生一個實例。
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved