Welcome 微信登录

首页 / 软件开发 / JAVA / Spring工作原理探秘

Spring工作原理探秘2011-09-14紫丁香社区Spring的哲学是在不影响Java对象的设计的情况下将Java对象加入到框架中。 我们下面来看看Spring 的工作原理,看看Spring是如何做到不影响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:

1.    public class Company {   2.     private String name;   3.     private Employee managingDirector;   4.       5.     public String getName() {    6.    return this.name;    7.     }   8.     public void setName(String name) {    9.    this.name = name;    10.     }    11.     public Employee getManagingDirector() {    12.    return this.managingDirector;    13.     }   14.     public void setManagingDirector(Employee managingDirector) {   15.    this.managingDirector = managingDirector;    16.     }   17.    }   18.       19.    public class Employee {   20.     private float salary;   21.       22.     public float getSalary() {   23.    return salary;   24.     }    25.     public void setSalary(float salary) {   26.    this.salary = salary;   27.     }   28.    }