Основа внедрения зависимостей - PullRequest
2 голосов
/ 30 ноября 2011

Я хочу написать свою собственную простую структуру 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-файла.

Может кто-нибудь объяснить концепцию этого типа фреймворкови напиши какой-нибудь код.

1 Ответ

3 голосов
/ 30 ноября 2011

Guice с открытым исходным кодом. Вы можете просмотреть код здесь: http://code.google.com/p/google-guice/source/browse/

Spring также с открытым исходным кодом. Вы можете скачать это здесь: http://www.springsource.org/download

Просмотр любого из них должен удовлетворить часть вашего вопроса «напишите какой-нибудь код».

РЕДАКТИРОВАТЬ: Кажется, вы ищете "магию". Это сводится к размышлению. Spring и / или Guice используют Java Reflection, чтобы найти соответствующие установщики (или поля) в классе и установить значения. Вот и все. Все остальное - клей, чтобы заставить всю систему работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...