Spring多对象引入方法
在以前使用xml配置注入的时候, 可以通过name名称注入, 也可以使用type类型注入.
在SpringBoot中, 可以使用@Resource和@Autowried注解进行注入.
@Resource 默认会使用名称进行注入, 如果找不到, 会使用自动使用类型进行注入.
@Autowried, 则会在容器中寻找匹配的对象, 如果找到则注入成功, 如果没找到或者找到多个, 则会报错.
但是, 如果有多个的情况下, 可以使用@Qualifier("别名") 进行约束.
1.创建Bean
1.1如果使用方法bean注入对象, 给@Bean添加name值.
@Bean(name="别名")
代码样例:
注意
下面的@Bean(name = "test01DataSource"), 可以使用applicationContext.getBean("test01DataSource") 进行获取.
@Primary表示 如果以type类型进行选择的话, 首选该Bean.
也即是说,使用applicationContext.getBean(DataSource.class) 和applicationContext.getBean("test01DataSource") 获取到的是同一个对象.
源码:
@Configuration
public class DataSourceConfig {
@Bean(name = "test01DataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.test01")
public DataSource getTest01DataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "test02DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test02")
public DataSource test02DataSource() {
return DataSourceBuilder.create().build();
}
}
测试代码:
@Autowired
ApplicationContext applicationContext;
@Test
public void testDataSourceHashCode() {
System.out.println(applicationContext.getBean(DataSource.class).hashCode());
System.out.println((applicationContext.getBean("test01DataSource")).hashCode());
System.out.println((applicationContext.getBean("test02DataSource")).hashCode());
}
结果样例:
1105282397
1105282397
793657559
1.2使用类注解进行注入对象. @Service, @Component,添加value值进行创建别名.
// 创建接口
public interface IBeanService {
public void printInfo();
}
//创建实例01, 并且添加上@Primary注解, 表名默认使用这个类
@Service(value = "bean01")
@Primary
public class Bean01Service implements IBeanService {
@Override
public void printInfo() {
System.out.println("This is bean 01");
}
}
//创建实例02,
@Service(value = "bean02")
public class Bean02Service implements IBeanService {
@Override
public void printInfo() {
System.out.println("This is bean 02");
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class IBeanServiceTest {
@Autowired
ApplicationContext applicationContext;
// create default bean.
@Autowired
IBeanService beanService;
@Autowired
@Qualifier("bean01")
IBeanService bean01Service;
@Autowired
@Qualifier("bean02")
IBeanService bean02Service;
@Test
public void printInfo() {
// create bean01
IBeanService bean01 = (IBeanService) applicationContext.getBean("bean01");
// create bean02
IBeanService bean02 = (IBeanService) applicationContext.getBean("bean02");
bean01.printInfo();
bean02.printInfo();
// create default bean, and it is bean01
applicationContext.getBean(IBeanService.class).printInfo();
}
@Test
public void printInfoThroughAutowired() {
beanService.printInfo();
bean01Service.printInfo();
bean02Service.printInfo();
}
}
2.调用
2.1.如果需要创建局部变量, 使用applicationContext.getBean(class/name)创建
对于有@Primary的对象, 直接使用getBean(class)进行调用.
applicationContext.getBean(IBeanService.class)
对于其他的Bean, 使用getBean(name)进行调用, 并进行类型强制转换.
eg. (IBeanService) applicationContext.getBean("bean02");
2.2.如果需要创建成员变量, 使用@Autowired和 @Qualifier("别名") 进行
对于有@Primary的对象, 直接使用@Autowired进行调用.代码如下
@Autowired IBeanService beanService;
对于其他的bean, 通过添加@Qualifier("别名")进行调用, 代码如下
@Autowired
@Qualifier("bean02")
IBeanService bean02Service;
总结
上一篇:Java Swing组件定制RadioButton示例
栏 目:JAVA代码
下一篇:JavaWeb项目中dll文件动态加载方法解析(详细步骤)
本文标题:Spring多对象引入方法
本文地址:http://www.codeinn.net/misctech/25489.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




