水曜日, 1月 03, 2007

DI болон DI Container гэж юу вэ? (vргэлжлэл)

Доорх жишээг харна уу.

Greeting.java
Greeting interface.

public interface Greeting {
String greet();
}

GreetingImpl.java
Greeting-ийн хэрэгжүүлэх класс

public class GreetingImpl implements Greeting {
public String greet() {
return "Hello World!";
}}

GreetingClient.java
Greeting -г ашиглах Client interface

public interface GreetingClient {
void execute();
}

GreetingClientImpl.java
Greeting-ийг хэрэглэх Client хэрэгжүүлэгч.

public class GreetingClientImpl implements GreetingClient {
private Greeting greeting;
public void setGreeting(Greeting greeting) {
this.greeting = greeting;
}
public void execute() {
System.out.println(greeting.greet());
}}

GreetingMain.java
public class GreetingMain {
public static void main(String[] args) {
Greeting greeting = new GreetingImpl();
GreetingClientImpl greetingClient = new GreetingClientImpl();
greetingClient.setGreeting(greeting);
greetingClient.execute();
}}

Үр дүн:
Hello World!

GreetingMain-дэх хэсгийн кодыг DI Container-ийн тохиргооны файлд оруулж өгвөл ямар нэг кодны өөрчлөлтөөс зугтаж болох юм. DI Container-ийн тохиргооны файл нь .dicon өргөтгөлтэй байна. Одоо жишээгээ өөрчлөн DI Container-луу оруулъя. (Зурган дээр дарж томоор харна уу)











Дээрх хэсгийг тайлбарлая.
4-р мөр нь Greeting greeting = new GreetingImpl(); гэсэн кодтой адил юм.
5, 6, 7-р мөр нь 4-р мөрөнд зарласан greeting компонентын нэрийг Property таг-д ашиглаж байна. Доорх хэсгийн код юм.

GreetingClientImpl greetingClient = new GreetingClientImpl();
greetingClient.setGreeting(greeting);

Main функц нь доорх байдлаар өөрчлөгдөнө.

GreetingMain2.java

import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;
public class GreetingMain2 {
private static final String PATH = " GreetingMain2.dicon";
public static void main(String[] args) {
S2Container container = S2ContainerFactory.create(PATH);
GreetingClient greetingClient = (GreetingClient) container.getComponent("greetingClient");





greetingClient.execute();
}}

AOP(Aspect Oriented Programming) нь DI-тай олонтаа хэрэглэгддэг. Жишээ нь одоо GreetingImpl, GreetingClientImpl классаас лог гаргаж үзье. Гэхдээ эх кодыг өөрчлөлгүйгээр лог гаргана. Үүний тулд .dicon файлд дараах өөрчлөлтийг хийнэ. (Зурган дээр дарж томоор харна уу)




















Илүү дэлгэрэнгүй үргэлжлүүлэн үзэхийг хүсвэл энд дарна уу.

Мөн жишээнүүдийг эндээс үзнэ үү.

0 件のコメント: