依赖注入框架的基础

时间:2011-11-29 22:53:18

标签: java dependency-injection inversion-of-control

我想编写自己的简单DI框架。 我希望它只执行像Spring这样的简单案例:

public interface IWriter {
    public void writer(String s);
}

@Service
public class MySpringBeanWithDependency {
    private IWriter writer;

    @Autowired
    public void setWriter(IWriter writer) {
        this.writer = writer;
    }

    public void run() {
        String s = "This is my test";
        writer.writer(s);
    }
}

@Service
public class NiceWriter implements IWriter {
    public void writer(String s) {
        System.out.println("The string is " + s);
    }
}

public class Main extends TestCase {

    @Test
    public void test() {

        ApplicationContext context = new ClassPathXmlApplicationContext(
                "META-INF/beans.xml");
        MySpringBeanWithDependency test = (MySpringBeanWithDependency) context
                .getBean("mySpringBeanWithDependency");
        test.run();
    }
}

相同的情况,但没有XML文件的mb。

有人可以解释这种类型的框架的概念并编写一些代码。

1 个答案:

答案 0 :(得分:3)

Guice是开源的。您可以在此处浏览代码: http://code.google.com/p/google-guice/source/browse/

Spring也是开源的。您可以在这里下载: http://www.springsource.org/download

浏览其中任何一个都应该满足问题的“写一些代码”部分。

编辑:看来你正在寻找“神奇”。它归结为反思。 Spring和/或Guice使用Java Reflection在类上查找适当的setter(或字段)并设置值。而已。其他一切都是粘合剂,使整个系统工作。