– 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
推荐阅读
- =======j2ee|spring用注解实现注入的@resource,@autowired,@inject区别
- jar|springboot项目打成jar包和war包,并部署(快速打包部署)
- 数据库|效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...
- java人生|35K 入职华为Java开发那天,我哭了(这 5 个月做的一切都值了)
- Java毕业设计项目实战篇|Java项目:在线嘿嘿网盘系统设计和实现(java+Springboot+ssm+mysql+maven)
- 微服务|微服务系列:服务发现与注册-----Eureka(面试突击!你想了解的Eureka都在这里.持续更新中......)
- java|ApplicationListener和SpringApplicationRunListener的联系
- Spring|SpringSecurity--自定义登录页面、注销登录配置
- 性能|性能工具之 Jmeter 通过 SpringBoot 工程启动
- 代码狂魔|Spring源码分析之IOC容器初始化流程