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. } 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |