有时我们为了使程序更加灵活 需要多个类实现同一个接口,到注入时不希望通过指定属性的名称或者类型来进行注入 如下图:
两个类同时实现了ISkill接口 在注入时 编译会有错误提示 无法定位具体的实现类
该问题可以通过自定义条件注解来解决 可以通过实现Condition接口并实现其中的方法 如图 (具体返回值可根据自己具体业务决定)
通过配置类在注入时使用@Conditional(ConditionDiana.class)
此时在依赖注入时就可以将正确的类型注入到IOC容器中了
@Conditional 该注解提供给我们一个自己可以控制注入到IOC容器的bean的类型
有人说可以通过@Autowired()和@Qualifier("")来解决 为什么要这么大费周章 因为这两个注解是通过IOC容器自动帮我们实例化 实例化的过程我们没办法灵活的操控需要实例化的bean 虽然可以通过构造方法和setter方法控制我们需要实例化的bean 但是当我们需要灵活决定需要注入的类型时
@Configuration和@Bean以及@Conditional结合起来就更加灵活了