论坛首页 Java企业应用论坛

自己动手写一个Spring (Spring 到底是怎么跑起来的)【20090708更新】

浏览 45464 次
该帖已经被评为精华帖
作者 正文
   发表时间:2009-07-03  
dvaknheo 写道
还是不能理解 spring 的作用
为什么不是这样呢
public static void main(String[] args) {  
       Animal animal = new Animal();
        animal.say();  

首先Animal类是个接口,new Animal() ??,
我想你是想问为什么不是
Animal animal = new Cat();
       animal.say(); 

因为say()方法内容为
public void say() {
		System.out.println("I am " + name + "!");
	}

而name这个属性是未知的所以将打印出,
I am null!

这显然不是我们想要的结果啊!
0 请登录后投票
   发表时间:2009-07-04  
为啥牛人这么多哇~~~
0 请登录后投票
   发表时间:2009-07-04   最后修改:2009-07-04
4年前用vb6整了一个spring framework 基础部分实现,现在非常痛苦,每次修改用那个框架的东西时,要面对一大堆xml
0 请登录后投票
   发表时间:2009-07-04  
自己造轮子,自己就得维护轮子
不过学习一些原理还是好的
0 请登录后投票
   发表时间:2009-07-04  
谢谢楼主,刚开始接触Spring  也正在慢慢理解的过程。
看了这篇文章,受益匪浅啊
0 请登录后投票
   发表时间:2009-07-04  
dvaknheo 写道
还是不能理解 spring 的作用
为什么不是这样呢
public static void main(String[] args) {  
       Animal animal = new Animal();
        animal.say();  

推荐看这个
http://www.martinfowler.com/articles/injection.html

和这个
http://en.wikipedia.org/wiki/Dependency_injection

里面都有说明为什么需要DI, 还有直接new Cat();的缺点是什么。
0 请登录后投票
   发表时间:2009-07-04  
martinfans 写道
dvaknheo 写道
还是不能理解 spring 的作用
为什么不是这样呢
public static void main(String[] args) {  
       Animal animal = new Animal();
        animal.say();  

推荐看这个
http://www.martinfowler.com/articles/injection.html

和这个
http://en.wikipedia.org/wiki/Dependency_injection

里面都有说明为什么需要DI, 还有直接new Cat();的缺点是什么。

补充说说我的愚见。
1) 直接创建对象依赖程度过高。 先说什么是依赖吧。
A 用到 B, A 就依赖 B 象这样
public class A{
  private B b = new BImpl();

  public void go(){
      if(b.go()){
        
      };

  }

  private void go(){
     //do something
  }
}

假如 B的构造方法需要参数,象这样
public B(String arg)

那么A 也得变。应该是配置优于编码。

2)不容易测试
假如B依赖于其他很多的类才能得到正确的结果,比如依赖于数据库连接,Web Service,或者部署在其他机器上的组件,那么测试A是一件很痛苦的事情。
我们为了做单元测试,有时候需要简化一些东西。比如,假设B返回是我们想要的结果,进而测试A的行为是不是符合我们的要求。 这时候我们需要做Mock,象这样,
public MockB implements B{
  public boolean go(){
     return true;
  }
}
这个类模拟返回true的情况,
问题是,我如何替换掉BImpl呢?
具体的请看这里
http://code.google.com/p/google-guice/downloads/list
-> Java on Guice - Developer Day Slides.pdf

不对之处,请大家批评指正。

另:楼主的东西很好,支持深入研究。
0 请登录后投票
   发表时间:2009-07-04  
对正在学习spring的新手很有帮助!谢谢!
0 请登录后投票
   发表时间:2009-07-05  
有点高深啊
0 请登录后投票
   发表时间:2009-07-06  
dvaknheo 写道
还是不能理解 spring 的作用
为什么不是这样呢
public static void main(String[] args) {  
       Animal animal = new Animal();
        animal.say();  



首先理解一下工厂模式~~
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics