快速业务通道

Spring工作原理探秘 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

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.    }

Spring工作原理探秘(2)

时间:2011-09-14 紫丁香社区

然后我们使用BeanWrapper来调用这两个bean:

1.    Company c = new Company();   
2.    BeanWrapper bwComp = BeanWrapperImpl(c);   
3.    // setting the company name...   
4.    bwComp.setPropertyValue("name", "Some Company Inc.");   
5.    // ... can also be done like this:   
6.    PropertyValue v = new PropertyValue("name", "Some Company Inc.");   
7.    bwComp.setPropertyValue(v);   
8.       
9.    // ok, lets create the director and tie it to the company:   
10.    Employee jim = new Employee();   
11.    BeanWrapper bwJim = BeanWrapperImpl(jim);   

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号