getterによる依存注入
依存注入はインタフェース向けプログラミングの前提であり,オブジェクトの使用とオブジェクトの作成を分離する.ユーザはインタフェースを知るだけで,具体的な実装がどのクラスであるかに関心を持つ必要はない.
例:
WorkerはSweepJobに依存せずにjobに依存しますが、WorkerはSweepJobオブジェクトを取得する必要があります.この場合、外部のコンテナが必要になります.Workerも対応する修正をして注入を受信します.
1.構造注入
2.setter注入
3.getter注入は、このログを書く目的でもあり、今日webxフレームワークを見て知ったのは、新しい意味があるような気がします.
例:
public interface Job {
public boolean doJob();
}
public class SweepJob {
private int garbage = 10;
public boolean doJbo() {
System.out.println(" ");
garbage--;
return garbage < 3;
}
}
public class Worker {
private Job job;
public void work() throws Exception {
while (!job.doJob()) {
System.out.println(" , ");
Thread.sleep(100);
}
}
}
WorkerはSweepJobに依存せずにjobに依存しますが、WorkerはSweepJobオブジェクトを取得する必要があります.この場合、外部のコンテナが必要になります.Workerも対応する修正をして注入を受信します.
1.構造注入
public class Worker {
private Job job;
public Worker(Job job) {
this.job = job;
}
...
}
public class AppContext {
private SweepJob job;
private Worker worker;
public void createBeans() {
job = new SweepJob();
worker = new Worker(job);
}
}
2.setter注入
public class Worker {
private Job job;
public void setJob(Job job) {
this.job = job;
}
...
}
public class AppContext {
private SweepJob job;
private Worker worker;
public void createBeans() {
job = new SweepJob();
worker = new Worker();
worker.setJob(job);
}
}
3.getter注入は、このログを書く目的でもあり、今日webxフレームワークを見て知ったのは、新しい意味があるような気がします.
public abstruct class Worker {
public abstruct Job getJob();
public void work() throws Exception {
while (!getJob().doJob()) {
System.out.println(" , ");
Thread.sleep(100);
}
}
}
public class AppContext {
private SweepJob job;
private Worker worker;
public void createBeans() {
job = new SweepJob();
worker = new Worker() {
public Job getJob() {
return job;
}
};
}
}