gpt4 book ai didi

如果没有 setter 方法,Spring 通过构造函数 Autowiring 将无法工作

转载 作者:行者123 更新时间:2023-12-02 17:33:40 24 4
gpt4 key购买 nike

这是我的 Spring xml 配置:

    <beans profile="test">
<context:annotation-config />

<!-- hsqldbDataSource bean for testing purposes -->
<bean id="hsqldbDataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="shutdown">
<constructor-arg>
<bean class="com.zaxxer.hikari.HikariConfig">
<constructor-arg>
<props>
<prop key="dataSource.url">${hsqldb.url}</prop>
<prop key="dataSource.user">${user}</prop>
<prop key="dataSource.password">${password}</prop>
</props>
</constructor-arg>
<property name="dataSourceClassName" value="org.hsqldb.jdbc.JDBCDataSource" />
<property name="connectionTestQuery" value="SELECT 1" />
<property name="maximumPoolSize" value="5" />
<property name="minimumPoolSize" value="1" />
</bean>
</constructor-arg>
</bean>

<!-- execute a script to create tables after creation of bean for in-memory HSQLDB -->
<jdbc:embedded-database id="hsqldbDataSource" type="HSQL">
<jdbc:script location="classpath:schema.sql" />
<jdbc:script location="classpath:test-data.sql"/>
</jdbc:embedded-database>

<bean id="daoManager" class="com.d.DAOManager" autowire="constructor">
<property name="dataSource" ref="hsqldbDataSource"/>
</bean>
</beans>

还有我的 DAOManager 类:

public class DAOManager {

private DataSource dataSource;
private Connection connection;

@Autowired
public DAOManager(DataSource dataSource) {
this.dataSource = dataSource;
}

public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}

在这里我调用获取我的 daoManager bean。

public static DAOManager createHSQLDBDAOManager() {
LOG.info("Setting up datasource to in-memory HSQLDB");
ConfigurableEnvironment env = (ConfigurableEnvironment)applicationContext.getEnvironment();
env.setActiveProfiles("test");
applicationContext.load("classpath:/applicationContext.xml");
applicationContext.refresh();
DAOManager daoManager = applicationContext.getBean("daoManager", DAOManager.class);
return daoManager;
}

如果我删除setter方法,为什么它会提示?我不需要它。如果我在构造函数之前删除@Autowired(它也可以工作),它只是无用并且不使用构造函数 Autowiring 函数。

最佳答案

需要删除 daoManager bean 的属性值

<bean id="daoManager" class="com.d.DAOManager" autowire="constructor"/>

关于如果没有 setter 方法,Spring 通过构造函数 Autowiring 将无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22477117/

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