?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

和記娛樂博娛188下載:品味Spring的魅力

?

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的深入鉆研

我們看看這個BeanWrapp和記娛樂博娛188下載er是若何發揮運作的,假設我們有兩個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和記娛樂博娛188下載 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的屬性了。

Bean的制造工廠

有了對單個Bean的包和記娛樂博娛188下載裝,還必要對多個的bean進行治理。在spring中,把bean納入到一個核心庫中進行治理。bean的臨盆有兩種措施:一種是一個bean孕育發生多個實例,一種是一個bean只孕育發生一個實例。假如對設計模式認識的話,我們就會想到,前者可以采納Prototype,后者可以采納Singleton。

留意到,反射技巧的應用使得我們不再像原始的工廠措施模式那樣創建工具。反射可以異常機動的根據類的名稱創建一個工具。以是spring只應用了Prototype和Singleton這兩個基礎的模式。

spring恰是這樣處置懲罰的,然則我們盼望用戶能夠掩護統一的接口,而不必要關心當前的bean到底是Prototype孕育發生的自力的bean,照樣Singleton孕育發生的共享的bean。以是,在org.springframework.beans.factory包中的BeanFactory定義了統一的getBean措施。

JdbcTemplate template = new JdbcTemplate(dataSource);

final List names = new LinkedList();

template.query("SELECT USER.NAME FROM USER",

new RowCallbackHandler() {

public void processRow(ResultSet rs) throws SQLException {

names.add(rs.getString(1));

}

});

回調函數是一個匿名類,此中也應用和記娛樂博娛188下載了模板措施,非常的處置懲罰都在父類中完成了。

層間松耦合

在開放源碼界已經呈現了大年夜量的基于MVC的Web容器,然則這些容器都僅限于Web和記娛樂博娛188下載的范圍,不涉及Web層次后真個連接,spring作為一個整體性的框架,定義了一種Web層和后端營業層的連接要領, 這個思路仍舊疏運圖MVC的范疇,但耦合更疏松,不依附于詳細的集成層次。

public class GoogleSearchController

implements Controller {

private IGoogleSearchPort google;

private String googleKey;

public void setGoogle(IGoogleSearchPort google) {

this.google = google;

}

public void setGoogleKey(String googleKey) {

this.googleKey = googleKey;

}

public ModelAndView handleRequest(

HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String query = request.getParameter("query");

GoogleSearchResult result =

// Google property definitions omitted...

// Use google business object

google.doGoogleSearch(this.googleKey, query,start, maxResults, filter, restrict, safeSearch, lr, ie, oe);

return new ModelAndView("googleResults", "result", result);

}

}

回調函數是一個匿名類,此中也應用了模板措施,非常的處置懲罰都在父類中完成了。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

快三平台开户