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