依赖注入是面向接口编程的前提,将对象的使用和对象的创建分离。使用者只需知道接口,而不必关心具体实现是哪个类。
例如:
Worker依赖job,而不依赖SweepJob,但是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依赖job,而不依赖SweepJob,但是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;
}
};
}
}