快捷搜索:  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);

}

}

回调函数是一个匿名类,此中也应用了模板措施,非常的处置惩罚都在父类中完成了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: