Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 依赖注入框架的基础_Java_Dependency Injection_Inversion Of Control - Fatal编程技术网

Java 依赖注入框架的基础

Java 依赖注入框架的基础,java,dependency-injection,inversion-of-control,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) {

我想编写自己的简单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();
    }
}
同样的情况,但是mb没有XML文件


谁能解释一下这种框架的概念并编写一些代码。

Guice是开源的。您可以在此处浏览代码:

Spring也是开源的。你可以在这里下载:

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


编辑:看来你在寻找“魔法”。这归结为反思。Spring和/或Guice使用Java反射在类上查找适当的setter(或字段)并设置值。就这样。其他一切都是胶水,使整个系统工作。

为什么要重新发明轮子?我不想重新发明?我想知道它是如何工作的。请阅读Spring文档。然后阅读源代码。很多接口和它们庞大的实现让它变得非常困难。总之,这对新手来说太复杂了。