首页 > 解决方案 > spring setter 注入调用混淆

问题描述

以下是 Spring-JDBC 上的 Spring 参考文档中的代码片段

https://docs.spring.io/spring-framework/docs/3.0.x/spring-framework-reference/html/jdbc.html

public class JdbcDao {

    private JdbcTemplate jdbcTemplate;
    
    public void setDataSource(DataSource dataSource) {
        System.out.println("inside the setDatasource");
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

XML 配置文件入口为::

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

   
   <bean id="jdbcDao" class="learning.spring.dao.JdbcDao">
        <property name="**dataSource**" ref="dataSource"/>
    </bean>

我的问题是即使 JdbcDao 类没有任何名称为 dataSource 的属性,Setter 注入如何发生在这里。因此,如果 bean 中没有属性,那么 setter 是如何被调用的呢?

标签: springspring-jdbc

解决方案


这是因为注入是通过 setter 方法完成的,而不是通过字段名称完成的,并且属性名称假定的 setter 方法名称与JdbcDao类中的实际 setter 方法名称匹配。

尝试阅读这些文章。

https://www.baeldung.com/spring-xml-injection

https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring


推荐阅读