将bean注入List或Map
在SpringBoot开发中,当一个接口A有多个实现类时,spring会很智能的将bean注入到List<A>或Map<String,A>变量中。
定义一个接口
public interface Animal {
void eat();
}
为接口做两个实现类
import org.springframework.stereotype.Component;
@Component("cat")
public class Cat implements Animal {
@Override
public void eat() {
System.out.println("eat fish");
}
}
import org.springframework.stereotype.Component;
@Component("dog")
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("eat bone");
}
}
注入List
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//使用@Component也可以
@Service
public class AnimalService {
@Autowired
List<Animal> animals;
}
注入Map
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//使用@Component也可以
@Service
public class AnimalService {
// key:为bean的名称,dog这个bean的注入的类型为<"dog", "dog这个bean">
// 通过get对应的bean名称获取bean
@Autowired
Map<String, Animal> animalMap;
}