Spring|Spring 自动依赖注入优化(qualifier)

– Start
点击此处观看本系列配套视频。 【Spring|Spring 自动依赖注入优化(qualifier)】自动依赖注入大大简化了我们的工作量,但是也有缺陷,如果一个接口有多个实现类,我们该注入哪一个呢?一种方法是给bean设置一个限定符(qualifier)

package shangbo.spring.example36; public interface MessageService { String getMessage(); }

package shangbo.spring.example36; public class MessageServiceDBImpl implements MessageService { public String getMessage() { return "This message from database"; }}

package shangbo.spring.example36; public class MessageServiceFileImpl implements MessageService { public String getMessage() { return "This message from file"; }}

package shangbo.spring.example36; import org.springframework.beans.factory.annotation.Qualifier; public class MessagePrinter {private MessageService service; // 使用限定符 @Qualifier("DB") public void setService(MessageService service) { this.service = service; } public void printMessage() { System.out.println(service.getMessage()); } }


package shangbo.spring.example36; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) { // 实例化 Spring IoC 容器 ApplicationContext context = new ClassPathXmlApplicationContext("example.xml", MessagePrinter.class); // 从容器中获得 MessagePrinter 的实例 MessagePrinter printer = context.getBean(MessagePrinter.class); // 使用对象 printer.printMessage(); } }

下面是使用 Java 配置的例子。
package shangbo.spring.example37; public interface MessageService { String getMessage(); }

package shangbo.spring.example37; public class MessageServiceDBImpl implements MessageService { public String getMessage() { return "This message from database"; }}

package shangbo.spring.example37; public class MessageServiceFileImpl implements MessageService { public String getMessage() { return "This message from file"; }}

package shangbo.spring.example37; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; public class MessagePrinter {private MessageService service; // 限定符 @Autowired @Qualifier("DB") public void setService(MessageService service) { this.service = service; } public void printMessage() { System.out.println(service.getMessage()); } }

package shangbo.spring.example37; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean @Qualifier("DB") public MessageService dbMessageService() { return new MessageServiceDBImpl(); } @Bean @Qualifier("FILE") public MessageService fileMessageService() { return new MessageServiceDBImpl(); } @Bean public MessagePrinter messagePrinter() { return new MessagePrinter(); } }

package shangbo.spring.example37; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class App { public static void main( String[] args ) { // 实例化 Spring IoC 容器 ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); // 从容器中获得 MessagePrinter 的实例 MessagePrinter printer = context.getBean(MessagePrinter.class); // 使用对象 printer.printMessage(); } }

– 更多参见:Spring Framework 精萃
– 声 明:转载请注明出处
– Last Updated on 2017-05-25
– Written by ShangBo on 2017-05-25
– End

    推荐阅读