Spring 自动依赖注入优化(qualifier)
来源:互联网 发布:ubuntu开启3306端口 编辑:程序博客网 时间:2024/05/22 13:08
– Start
自动依赖注入大大简化了我们的工作量,但是也有缺陷,如果一个接口有多个实现类,我们该注入哪一个呢?一种方法是给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()); }}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd" default-autowire="byType"> <!-- 全局设定自动注入方式 --> <!-- 告诉 Spring 解析bean中的注解 注意需要引入 context 命名空间 --> <context:annotation-config/> <!-- 两个对象继承自同一接口, 设置不同的限定符 qualifier --> <bean class="shangbo.spring.example36.MessageServiceDBImpl"> <qualifier value="DB"/> </bean> <bean class="shangbo.spring.example36.MessageServiceFileImpl"> <qualifier value="FILE"/> </bean> <bean class="shangbo.spring.example36.MessagePrinter"/></beans>
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;@Configurationpublic 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
阅读全文
0 0
- Spring 自动依赖注入优化(qualifier)
- Spring 自动依赖注入优化(primary)
- Spring 自动依赖注入优化(autowire-candidate)
- spring 自动依赖注入
- Spring 自动注入依赖
- Spring 自动依赖注入
- Spring 注解实现Bean依赖注入之@Qualifier
- @Qualifier注解缩小@Autowired自动注入的范围【Spring 入门】
- Spring依赖注入,自动扫描组件,自动装配,注解注入
- Spring如何实现自动依赖注入-------autowire
- Spring依赖注入 — 属性自动装配
- Spring依赖注入 — 属性自动装配
- Spring自动扫面和依赖注入
- Spring如何实现自动依赖注入-------autowire
- Spring如何实现自动依赖注入-------autowire
- Spring如何实现自动依赖注入-------autowire
- Spring如何实现自动依赖注入-------autowire
- Spring DI依赖注入,自动装配
- 【A*求K短路】POJ2449 Remmarguts' Date
- 蓝桥决赛---五星填数
- Android 6.0运行时权限的申请使用及EasyPermissions的使用
- 【算法题】消除重复元素
- C++/C++11中std::deque的使用
- Spring 自动依赖注入优化(qualifier)
- 6. ZigZag Conversion
- 网络图片的爬取与存储
- Faster-R-CNN(Python).3: numpy.where()函数
- XX特惠系统 压测接口汇总
- Jexus 托管方式运行 Asp.net core
- 树形DP入门
- 内部类
- 2、SpringCloud 第一课 Eureka 注册中心