Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions Test2_Injector/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
group 'ru.spbau.mit'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
mavenCentral()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
50 changes: 50 additions & 0 deletions Test2_Injector/build/resources/main/Practice.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Injector

* Необходимо реализовать статический метод `Injector.initialize`, эмулирующий работу контейнера Dependency Injection.

* Его основная задача - создать объект класса, полное имя которого передано в параметре `rootClassName`.

* Также в метод передается набор доступных классов реализаций. Для каждого такого класса за один `initialize` должно быть создано не более одного экземпляра.

* Гарантируется, что каждый класс содержит ровно один конструктор.

---

# Injector

Параметры конструктора определяют зависимости данного класса.

```java
public class A {
public A(Interface1 x) {}
}

public class B implements Interface1 {}
```

Класс A зависит от интерфейса `Interface1` (так же зависимостью может быть абстрактный или конкретный класс).

Таким образом, чтобы создать объект класса `A`, можно сначала создать объект класса `B` и передать его в конструктор.

Понятно, что зависимости могут быть несколько более замысловатыми.

---

# Injector

* Метод `initialize` должен завершиться с исключением `AmbiguousImplementationException`, если найдено несколько разных классов-реализаций одной и той же зависимости (зависимости --- это только те классы и интерфейсы, которые встречаются в конструкторах).

* Метод `initialize` должен завершиться с исключением `ImplementationNotFoundException`, если для какой-то зависимости не найдено ни одной реализации.

* Метод `initialize` должен завершиться с исключением `InjectionCycleException`, если зависимости прямо или косвенно образуют цикл.

* В остальных случаях метод должен вернуть объект класса `rootClassName`.

---

# Формат сдачи

* Запаковываете проект в zip-архив
* Посылаете письмо преподавателю c архивом:
* s-proshev@ya.ru
Copy link
Collaborator

@jzuken jzuken Dec 19, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

позвольте поинтересоваться, а откуда у вас эти файлы с условием? я такого не давал

* Java02. КР 02 <фамилия> <имя>
Binary file added Test2_Injector/build/resources/main/Practice.pdf
Binary file not shown.
6 changes: 6 additions & 0 deletions Test2_Injector/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#Sat Dec 03 18:22:53 MSK 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.1-bin.zip
169 changes: 169 additions & 0 deletions Test2_Injector/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

84 changes: 84 additions & 0 deletions Test2_Injector/gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Test2_Injector/settings.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
rootProject.name = 'injector'

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package ru.spbau.savon.test2.Injector;

public class AmbiguousImplementationException extends Exception {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package ru.spbau.savon.test2.Injector;

public class ImplementationNotFoundException extends Exception {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package ru.spbau.savon.test2.Injector;

public class InjectionCycleException extends Exception {
}
Loading