gpt4 book ai didi

java - 如何简化在Spring中使用DataSource的xml文件中添加多个bean

转载 作者:行者123 更新时间:2023-12-01 15:30:46 24 4
gpt4 key购买 nike

我正在使用 Spring 3.0 和 JDBC 我目前正在尝试将 Spring 用于桌面应用程序。每次类需要使用 spring_bean_file.xml 上声明的数据源时,我都需要在 xml 文件中声明它们中的每一个,并再次在我的类中初始化它们中的每一个。
下面是我的 xml 文件

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">       
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="#{T(java.lang.System).getenv(DB_URL')}"/>
<property name="username" value="#{T(java.lang.System).getenv('DB_USER')}"/>
<property name="password" value="#{T(java.lang.System).getenv('DB_PASS')}"/>
</bean>


<bean id="classA" class="com.example.ClassA">
<property name="dataSource" ref="dataSource"/>
</bean>

<bean id="classB" class="com.example.ClassB">
<property name="dataSource" ref="dataSource"/>
</bean>

这是我的java代码:

public static void main(String[] args) {        

ApplicationContext context = new ClassPathXmlApplicationContext("spring_bean_file.xml");
ClassA classA = (ClassA) context.getBean("classA");
ClassB classB = (ClassB) context.getBean("classB");
try {
rrRpi.generateRrRpi();
rrSpi.generateRrSpi();
} catch (SQLException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}

//close the context
((ClassPathXmlApplicationContext) context).close();

}

我想知道是否有更有效的方法来做到这一点。最好的方法是什么,这样我就不需要为每个使用 DataSoruce 的类添加一个 bean。提前谢谢大家。

最佳答案

您可以使用:

注释和 CLASSPATH 扫描

@Service
public class ClassA {
@Resource
private DataSource dataSource;

//...
}

@Service
public class ClassB {
@Resource
private DataSource dataSource;

//...
}

dataSource定义仍然需要在 XML 中,您还需要替换 classAclassB <bean/>简单的定义:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<context:component-scan base-package="com.example" />

<!-- ... -->
</beans

@配置

或者您可以利用非常新但令人兴奋的 Java 配置:

@Configuration
public class Cfg {

@Bean
public DataSource dataSource() {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver);
//...
return ds;
}

@Bean
public ClassA classA() {
ClassA ca = new ClassA()
ca.setDataSource(dataSource());
return ca;
}

@Bean
public ClassB classB() {
ClassB cb = new ClassB()
cb.setDataSource(dataSource());
return cb;
}

}

这种方法的好处是您根本不需要 XML:

new AnnotationConfigApplicationContext(Cfg.class);

另请参阅

关于java - 如何简化在Spring中使用DataSource的xml文件中添加多个bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9530022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com