使用基于 Spring Java 的配置注入 bean 依赖项
Injecting bean dependencies with Spring Java based configuration
我正在尝试了解基于 Spring Java 的配置。通常我可能有一个 XML 配置,其中包含如下内容:
<context:property-placeholder location="jdbc.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
p:driverClassName="${jdbc.driverClassName}"
p:ur="${jdbc.url}"
p:username="${jdbc.username}"
p:password="${jdbc.password}"/>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="dataSource" />
我使用基于 Spring Java 的配置来生成等效项的努力已经停滞。尝试将我的数据源注入 jdbcTemplate 时,我不确定该怎么做:
@PropertySource("classpath:jdbc.properties")
@Configuration
public class Config {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean(name = "dataSource")
public DataSource dataSource(
@Value("${jdbc.driverClassName}") final String driverClassName,
@Value("${jdbc.url}") final String url,
@Value("${jdbc.username}") final String username,
@Value("${jdbc.password}") final String password) {
BasicDataSource datasource = new BasicDataSource();
datasource.setDriverClassName(driverClassName);
datasource.setUrl(url);
datasource.setUsername(username);
datasource.setPassword(password);
return datasource;
}
@Bean(name = "jdbcTemplate")
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(
/* Property 'dataSource' is required and needs to be referenced
* What goes here?
*/
);
}
}
我的猜测是没有直接的等价物,我可能需要以稍微不同的方式处理事情?
您不需要在配置中创建 jdbcTemplate
。您可以在 DAO class 中创建它。
在 DAO 中 Class:
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(final DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
}
因为 JdbcTemplate 包含 JdbcTemplate(DataSource dataSource)
构造函数。
你可以这样试试
@PropertySource("classpath:jdbc.properties")
@Configuration
public class Config {
@Autowired
private Environment env;
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean(name = "dataSource")
public DataSource dataSource() {
BasicDataSource datasource = new BasicDataSource();
datasource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
// Similarly other values
// datasource.setUrl(url);
// datasource.setUsername(username);
// datasource.setPassword(password);
return datasource;
}
@Bean(name = "jdbcTemplate")
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource());
}
}
我正在尝试了解基于 Spring Java 的配置。通常我可能有一个 XML 配置,其中包含如下内容:
<context:property-placeholder location="jdbc.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
p:driverClassName="${jdbc.driverClassName}"
p:ur="${jdbc.url}"
p:username="${jdbc.username}"
p:password="${jdbc.password}"/>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="dataSource" />
我使用基于 Spring Java 的配置来生成等效项的努力已经停滞。尝试将我的数据源注入 jdbcTemplate 时,我不确定该怎么做:
@PropertySource("classpath:jdbc.properties")
@Configuration
public class Config {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean(name = "dataSource")
public DataSource dataSource(
@Value("${jdbc.driverClassName}") final String driverClassName,
@Value("${jdbc.url}") final String url,
@Value("${jdbc.username}") final String username,
@Value("${jdbc.password}") final String password) {
BasicDataSource datasource = new BasicDataSource();
datasource.setDriverClassName(driverClassName);
datasource.setUrl(url);
datasource.setUsername(username);
datasource.setPassword(password);
return datasource;
}
@Bean(name = "jdbcTemplate")
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(
/* Property 'dataSource' is required and needs to be referenced
* What goes here?
*/
);
}
}
我的猜测是没有直接的等价物,我可能需要以稍微不同的方式处理事情?
您不需要在配置中创建 jdbcTemplate
。您可以在 DAO class 中创建它。
在 DAO 中 Class:
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(final DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
}
因为 JdbcTemplate 包含 JdbcTemplate(DataSource dataSource)
构造函数。
你可以这样试试
@PropertySource("classpath:jdbc.properties")
@Configuration
public class Config {
@Autowired
private Environment env;
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean(name = "dataSource")
public DataSource dataSource() {
BasicDataSource datasource = new BasicDataSource();
datasource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
// Similarly other values
// datasource.setUrl(url);
// datasource.setUsername(username);
// datasource.setPassword(password);
return datasource;
}
@Bean(name = "jdbcTemplate")
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource());
}
}