怎么在Spring中引入多对象

  • 时间:
  • 浏览:23
  • 来源:恰卡网

导读本篇文章为大家展示了怎么在Spring中引入多对象,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 1.创建Bean 1.1如果使用方法bean注入对象, 给...

本篇文章为大家展示了怎么在Spring中引入多对象,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

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
publicclassDataSourceConfig{
@Bean(name="test01DataSource")
@Primary
@ConfigurationProperties(prefix="spring.datasource.test01")
publicDataSourcegetTest01DataSource(){
returnDataSourceBuilder.create().build();
}
@Bean(name="test02DataSource")
@ConfigurationProperties(prefix="spring.datasource.test02")
publicDataSourcetest02DataSource(){
returnDataSourceBuilder.create().build();
}
}

测试代码:

@Autowired
ApplicationContextapplicationContext;
@Test
publicvoidtestDataSourceHashCode(){
System.out.println(applicationContext.getBean(DataSource.class).hashCode());
System.out.println((applicationContext.getBean("test01DataSource")).hashCode());
System.out.println((applicationContext.getBean("test02DataSource")).hashCode());
}

结果样例:

11052823971105282397793657559

1.2使用类注解进行注入对象. @Service, @Component,添加value值进行创建别名.

//创建接口
publicinterfaceIBeanService{
publicvoidprintInfo();
}
//创建实例01,并且添加上@Primary注解,表名默认使用这个类
@Service(value="bean01")
@Primary
publicclassBean01ServiceimplementsIBeanService{
@Override
publicvoidprintInfo(){
System.out.println("Thisisbean01");
}
}
//创建实例02,
@Service(value="bean02")
publicclassBean02ServiceimplementsIBeanService{
@Override
publicvoidprintInfo(){
System.out.println("Thisisbean02");
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
publicclassIBeanServiceTest{
@Autowired
ApplicationContextapplicationContext;
//createdefaultbean.
@Autowired
IBeanServicebeanService;
@Autowired
@Qualifier("bean01")
IBeanServicebean01Service;
@Autowired
@Qualifier("bean02")
IBeanServicebean02Service;
@Test
publicvoidprintInfo(){
//createbean01
IBeanServicebean01=(IBeanService)applicationContext.getBean("bean01");
//createbean02
IBeanServicebean02=(IBeanService)applicationContext.getBean("bean02");
bean01.printInfo();
bean02.printInfo();
//createdefaultbean,anditisbean01
applicationContext.getBean(IBeanService.class).printInfo();
}
@Test
publicvoidprintInfoThroughAutowired(){
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
IBeanServicebeanService;

对于其他的bean, 通过添加@Qualifier("别名")进行调用, 代码如下

@Autowired
@Qualifier("bean02")
IBeanServicebean02Service;

上述内容就是怎么在Spring中引入多对象,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注恰卡网行业资讯频道。

猜你喜欢

飞利浦278E1显示器体验如何(飞利浦278E1显示器体验评测)

飞利浦278E1显示器体验如何,飞利浦278E1显示器体验评测 目前27寸显示器已经成为了市面上的主流产品。这样尺寸的显示器在桌面上,整体的观感更好,再搭配了更高的分辨率,让显示器可以显示

2021-06-22

Python(中的单分派泛函数你真的了解吗)

Python,中的单分派泛函数你真的了解吗 泛型,如果你学过Java ,应该对它不陌生吧。但你可能不知道在 Python 中(3.4+ ),也可以实现简单的泛型函数。 在Python中只能实现基于单个(第一个)参

2021-06-22

Java8新特性:函数式编程

Java8新特性:函数式编程 首先需要清楚一个概念:函数式接口;它指的是有且只有一个未实现的方法的接口,一般通过FunctionalInterface这个注解来表明某个接口是一个函数式接口。函数式接口是

2021-06-22

Python实现DBSCAN聚类算法并样例测试

Python实现DBSCAN聚类算法并样例测试 什么是聚类算法?聚类是一种机器学习技术,它涉及到数据点的分组。给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组。理论上,

2021-06-22