当一个类的实现需要依赖一个或多个底层资源时,可以利用依赖注入,将这些资源传给构造器、静态工厂或者构建器,通过它们来创建类
依赖注入的三种方式:
- 通过filed注入
- 通过构造器注入
- 通过setter注入
先创建Book资源类
class Book {
void read() {
System.out.println("读书");
}
}
class Literature extends Book {
void read() {
System.out.println("读文学书");
}
}
class PhilosophyBook extends Book {
void read() {
System.out.println("读哲学书");
}
}
1. 通过filed注入
class Person {
private static final Book book = new Book();
public void read() {
book.read();
}
}
通过filed注入的方式不理想,因为它无法支持多资源
2. 通过构造器注入
class Person {
private final Book book;
public Person(Book book) {
this.book = Objects.requireNonNull(book);
}
public void read() {
book.read();
}
}
3. 通过setter方法注入
class Person {
private final Book book;
public void setBook(Book book) {
this.book = Objects.requireNonNull(book);
}
public void read() {
book.read();
}
}