java中列表的定义,java - 如何在Spring中定义List bean?

java - 如何在Spring中定义List bean?

我正在使用Spring在我的应用程序中定义阶段。 配置为必要的类(此处称为Configurator)注入阶段。

现在我需要另一个班级的阶段列表,名为LoginBean.Configurator不提供访问他的阶段列表的权限。

我无法改变类Configurator。

我的想法:

定义一个名为Stages的新bean,并将其注入Configurator和LoginBean。我的这个想法的问题是我不知道如何转换这个属性:

...

...

...

成豆。

这样的东西不起作用:

任何人都可以帮我吗?

10个解决方案

266 votes

导入spring util命名空间。 然后您可以按如下方式定义列表bean:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:util="http://www.springframework.org/schema/util"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/util

http://www.springframework.org/schema/util/spring-util-2.5.xsd">

foo

bar

value-type是要使用的泛型类型,并且是可选的。 您还可以使用属性list-class指定列表实现类。

simonlord answered 2019-03-11T05:40:10Z

162 votes

这是一种方法:

stacker answered 2019-03-11T05:40:35Z

33 votes

另一种选择是使用JavaConfig。 假设所有阶段都已注册为spring beans,您只需:

@Autowired

private List stages;

和spring会自动将它们注入此列表中。 如果您需要保留订单(上层解决方案不这样做),您可以这样做:

@Configuration

public class MyConfiguration {

@Autowired

private Stage1 stage1;

@Autowired

private Stage2 stage2;

@Bean

public List stages() {

return Lists.newArrayList(stage1, stage2);

}

}

保留顺序的另一个解决方案是在bean上使用@Order注释。 然后列表将包含按升序注释值排序的bean。

@Bean

@Order(1)

public Stage stage1() {

return new Stage1();

}

@Bean

@Order(2)

public Stage stage2() {

return new Stage2();

}

Jakub Kubrynski answered 2019-03-11T05:41:19Z

29 votes

class="com.somePackage.SomeClass">

在SomeClass中:

class SomeClass {

private List myList;

@Required

public void setMyList(List myList) {

this.myList = myList;

}

}

Koray Tugay answered 2019-03-11T05:41:46Z

8 votes

Stacker提出了一个很好的答案,我会更进一步使其更具动态性并使用Spring 3 EL Expression。

#{springDAOBean.getGenericListFoo()}

我试图找出如何使用util:list来实现这一点,但由于转换错误而无法使其工作。

haju answered 2019-03-11T05:42:19Z

4 votes

我想你可能在寻找。

您声明一个ListFactoryBean实例,提供要实例化为2252339368404714496元素作为其值的属性的列表,并为该bean提供id属性。 然后,每次在声明的id中使用ref或类似的其他bean声明时,都会实例化列表的新副本。 您还可以指定要使用的List类。

Stephen C answered 2019-03-11T05:42:54Z

1 votes

使用util命名空间,您将能够在应用程序上下文中将列表注册为bean。 然后,您可以重用该列表将其注入其他bean定义中。

Juan Perez answered 2019-03-11T05:43:21Z

1 votes

作为Jakub答案的补充,如果您打算使用JavaConfig,您也可以通过这种方式自动装配:

import com.google.common.collect.Lists;

import java.util.List;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Bean;

@Configuration

public class MyConfiguration {

@Bean

public List stages(final Stage1 stage1, final Stage2 stage2) {

return Lists.newArrayList(stage1, stage2);

}

}

Jose Alban answered 2019-03-11T05:43:48Z

0 votes

这是如何在Spring中的一些属性中注入set:

class="biz.bsoft.processing">

Slava Babin answered 2019-03-11T05:44:15Z

0 votes

之后定义那些bean(test1,test2):)

RaM PrabU answered 2019-03-11T05:44:41Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
dynamic-datasource-spring-boot-starter是一个Spring Boot插件,可以帮助你在应用程序轻松配置和使用多个数据源。使用该插件,你只需要在配置文件定义多个数据源,然后在代码使用注解来指定要使用的数据源。 下面是使用dynamic-datasource-spring-boot-starter的步骤: 1. 引入依赖 在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>2.5.1</version> </dependency> ``` 2. 配置数据源 在application.yml或application.properties配置文件配置多个数据源。例如: ```yaml spring: datasource: datasource1: url: jdbc:mysql://localhost:3306/db1 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver datasource2: url: jdbc:mysql://localhost:3306/db2 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver ``` 3. 配置动态数据源 在代码配置动态数据源。例如: ```java @Configuration public class DataSourceConfig { @Primary @Bean @ConfigurationProperties(prefix = "spring.datasource.datasource1") public DataSource datasource1() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.datasource2") public DataSource datasource2() { return DataSourceBuilder.create().build(); } @Bean public DynamicDataSource dynamicDataSource() { Map<Object, Object> dataSourceMap = new HashMap<>(); dataSourceMap.put("datasource1", datasource1()); dataSourceMap.put("datasource2", datasource2()); DynamicDataSource dynamicDataSource = new DynamicDataSource(); dynamicDataSource.setTargetDataSources(dataSourceMap); dynamicDataSource.setDefaultTargetDataSource(datasource1()); return dynamicDataSource; } @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dynamicDataSource()); return sqlSessionFactoryBean.getObject(); } } ``` 在上面的例子,我们通过配置两个DataSource对象,然后将它们放入一个Map,并将这个Map注入到DynamicDataSource对象。DynamicDataSource对象通过调用setTargetDataSources()方法来设置所有可用的数据源,并通过调用setDefaultTargetDataSource()方法来设置默认数据源。 4. 使用动态数据源 在代码使用动态数据源。例如: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @DataSource("datasource2") public List<User> listUsers() { return userMapper.listUsers(); } } ``` 在上面的例子,我们使用了@DataSource注解来指定要使用的数据源,这里我们指定使用datasource2数据源。 这就是使用dynamic-datasource-spring-boot-starter插件在Spring Boot应用程序配置和使用多个数据源的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值