使用类似注释自动装配bean

时间:2018-03-08 13:46:52

标签: spring spring-boot autowired

我有一个场景,其中有多个类实现相同的接口。但是很少有一个注释用一个注释注释,而用其他注释来注释。现在我想要自动装配一个用特定类型的注释注释的类列表。是否仅仅通过使用注释就可以实现它?

这就是我想要做的事情:

@Target({ElementType.FIELD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Fruit{...}

@Target({ElementType.FIELD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Vegetable {...}

public interface Food {...}

@Fruit
@Component
public class Banana implements Food{...}

@Vegetable
@Component
public class Tomato implements Food{...}

public class Test{

@Autowired
@Fruit
List<Food> fruitList; // Getting instance of both Banana and Tomatao
}

这里,fruitList与Tomato和Banana的实例一起自动装配,而不是仅仅获得香蕉;这不是我一直在寻找的。请有人帮我理解我在这里失踪了吗?

我期待在这里进行基于注释的自动装配,但它正在接受所有Food Interface的实现。

1 个答案:

答案 0 :(得分:0)

使用接口创建类型层次结构

public interface Food {
}

public interface Vegetable extends Food {
}

public interface Fruit extends Food {
}

public class Banana implements Fruit {
}

public class Tomato implements Vegetable {
}

然后你可以控制事情:

@Autowired
List<Food> foods; // Getting instance of both Banana and Tomatao

@Autowired
List<Fruit> fruits; // Getting instance of only Banana

@Autowired
List<Banana> bananas; // Getting instance of only Banana

@Autowired
List<Vegetable> vegetables; // Getting instance of only Tomato

@Autowired
List<Tomato> tomatos; // Getting instance of only Tomato