Java 如何简化在使用Spring数据源的xml文件中添加多个bean的过程
我正在使用Spring3.0和JDBC,我目前正在为桌面应用程序试用Spring。每次类需要使用在我的spring\u bean\u file.xml上声明的数据源时,我都需要在xml文件中声明它们,并再次在类中初始化它们。Java 如何简化在使用Spring数据源的xml文件中添加多个bean的过程,java,spring,jdbc,Java,Spring,Jdbc,我正在使用Spring3.0和JDBC,我目前正在为桌面应用程序试用Spring。每次类需要使用在我的spring\u bean\u file.xml上声明的数据源时,我都需要在xml文件中声明它们,并再次在类中初始化它们。 下面是我的xml文件 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <propert
下面是我的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>
我想知道是否有更有效的方法。最好的方法是什么,这样我就不需要为每个使用DataSoruce的类添加bean了。提前感谢各位。您可以使用:
注释和类路径扫描
dataSource
定义仍然需要在XML中,您还需要将classA
和classB
定义替换为简单的:
<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
这种方法的好处是,您根本不需要XML:
new AnnotationConfigApplicationContext(Cfg.class);
另见
- -关于如何避免声明重复的依赖项(
实际用作示例)dataSource
context:component scan
@royjavelosa:附近的更新答案,请记住XML命名空间声明并提供真实的包名。@royjavelosa:ClassPathXmlApplicationContext
在桌面应用程序中很好。不幸的是,您必须以某种方式引用第一个bean。您的方法是可以的,但是考虑强类型版本:<代码> Class类=上下文。
<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
@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;
}
}
new AnnotationConfigApplicationContext(Cfg.class);