品味Spring 的魅力

2016-01-29 12:54 4 1 收藏

品味Spring 的魅力,品味Spring 的魅力

【 tulaoshi.com - Java 】


  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, 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只产生一个实例。如果对设计模式熟悉的话,我们就会想到,前者可以采用Prototype,后者可以采用Singleton。

  注意到,反射技术的使用使得我们不再像原始的工厂方法模式那样创建对象。反射可以非常灵活的根据类的名称创建一个对象。所以spring只使用了Prototype和Singleton这两个基本的模式。

  spring正是这样处理的,但是我们希望用户能够维护统一的接口,而不需要关心当前的bean到底是Prototype产生的独立的bean,还是Singleton产生的共享的bean。所以,在org.springframework.beans.factory包中的BeanFactory定义了统一的getBean方法。

  JDBC再封装JDBC优雅的封装了底层的数据库,但是JDBC仍然存在诸多的不变。你需要编写大量的代码来完成CRUD操作,而且,JDBC无论是遇到什么样的问题,都抛出一个SQLException,这种做法在异常使用上被称为不完备的信息。因为问题可能是很复杂的,也许是数据库连接的问题,也许是并发控制的问题,也许只是SQL语句出错。没有理由用一个简单的SQLException就搞定全部的问题了,这种做法有些不负责任。针对这两个问题,Spring Framework提出了两种解决方法:首先,提供一个框架,把JDBC应用

来源:https://www.tulaoshi.com/n/20160129/1488031.html

延伸阅读
标签: 家居设计
装修房屋时,对于小夫妻来说厨房可是一个非常重要的地盘。 品味生活从厨房开始 ,幸福厨房的打造,首先要从颜色上下手,什么样的颜色可以让你的幸福指数飙升。小夫妻俩在厨房精心地学习烹饪,享受烹饪的乐趣,那就是幸福。厨房的设计其实不用太过复杂,简单一点范儿给人感觉舒适。对于生活的品味快体现出来吧。下面这款简单的厨房设计就是今天...
标签: Web开发
本文将为您提供关于Spring MVC框架的配置技巧,以帮助管理基于Spring的web应用程序的多个实例。本配置管理主题常被学术界所忽略,但是,这对于现实的web开发尤为重要。本主题并不直接关联任何具体的技术,因此,我们将从最基本的概念开始对这个问题进行说明。下面,我们将根据Spring MVC框架,为基于本技术开发的项目提供一系列的解决方案。 ...
本文介绍如何利用Eclipse插件Spring IDE在Eclipse中的使用。 Eclipse是目前非常流行的开发平台,开放扩展的架构让很多程序员找到了自己个性化的工作环境。 问题提出: 在采用Spring框架进行系统开发时,Bean的配置文件XML的书写、XML文件的内容校验及Bean之间的依靠关系查看等工作,假如能够采用合适的工具来完...
标签: 养生 健康
一、两颊生津 茶叶内涵成份中,有茶单宁和某些其它成份,能刺激口腔内壁紧束收敛,形成涩感以及生津。但是并非凡是涩感都会生津,部分较劣等茶品,虽然茶汤很涩,但并不会生津,始终觉得口内部卷缩而不开,引起口干如燥,喉头也因此紧锁不顺,使有强烈的渴感,但喉头却不想饮喝。如此不但不能解除缺水干渴之苦,同时更堵断了急需补...
职场生活变得丰富多彩,所以要想获得关注并建立自己的气场就必须有自己的Icon. 别以为Icon是时尚界的专有名词,职场也有Icon。它不是一个简单的符号,一个标示,而是在职场脱颖而出的要素和亮点,这些要素成为被接受被追随被崇拜的原因。职场Icon涵盖了风格品味态度和处世方法。 Icon 1:独特的品味 良...

经验教程

858

收藏

12
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部