spring:xml方式调用构造方法创建Bean,调用set方法配置字段

如题:

要创建的Bean类UserServiceImpl02 :

java 复制代码
package com.itheima.service.impl;


import com.itheima.dao.interfaces.InterfaceUserDao;
import com.itheima.service.interfaces.InterfaceUserService;


/**
 * @copyright 2003-2024
 * @author    qiao wei
 * @date      2024-12-23
 * @version   1.0
 * @brief     
 * @history   name
 *            date
 *            brief
 */
public class UserServiceImpl02 implements InterfaceUserService {
    
    public UserServiceImpl02(InterfaceUserDao paramUserDao, double paramValue) {
        this.userDao = paramUserDao;
        this.value01 = paramValue;
//        paramUserDao.print();
//        System.out.println("类UserServiceImpl02调用有参构造函数。---" + userDaoABC);
//        System.out.println(value01);
    }
    
    @Override
    public void show() {
        System.out.println("类UserServiceImpl02的show方法。");
        System.out.println("打印字段数据。userDao:" + userDao + ",value01:" + value01);
        System.out.println(userDaoABC);
    }

    @Override
    public void setUserDao001(InterfaceUserDao userDao) {
//        System.out.println("调用属性设置方法。");
        this.userDaoABC = userDao;
    }
    
    private InterfaceUserDao userDao;
    
    private InterfaceUserDao userDaoABC;
    
    private double value01;
}
复制代码
InterfaceUserService接口:
java 复制代码
package com.itheima.service.interfaces;


import com.itheima.dao.interfaces.InterfaceUserDao;


/**
 * @copyright 2003-2024
 * @author    qiao wei
 * @date      2024-12-22
 * @version   1.0
 * @brief     
 * @history   name
 *            date
 *            brief
 */
public interface InterfaceUserService {
    
    void show();
    
    void setUserDao001(InterfaceUserDao userDao);
}

类中的字段类UserDaoImpl :

java 复制代码
package com.itheima.dao.impl;


import com.itheima.dao.interfaces.InterfaceUserDao;


/**
 * @copyright 2003-2025
 * @author    qiao wei
 * @date      2025-03-24
 * @version   1.0
 * @brief     
 * @history   name
 *            date
 *            brief
 */
public class UserDaoImpl implements InterfaceUserDao {
    
    public UserDaoImpl() {
        
    }
    
    @Override
    public void print() {
        System.out.println("UserDaoImpl类实例,继承接口InterfaceUserDao");
    }
}

字段实现的接口InterfaceUserDao :

java 复制代码
package com.itheima.dao.interfaces;


/**
 * @copyright 2003-2024
 * @author    qiao wei
 * @date      2024-12-22
 * @version   1.0
 * @brief     
 * @history   name
 *            date
 *            brief
 */
public interface InterfaceUserDao {
    
    void print();
}

类结构:

复制代码
userServiceImpl02.xml配置文件:
XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-4.0.xsd
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
    
    <bean id="serviceImpl02"
          class="com.itheima.service.impl.UserServiceImpl02">
        
        <!--    构造方法参数    -->
        <constructor-arg name="paramUserDao"
                         ref="userDao"
        >
        </constructor-arg>
        
        <constructor-arg name="paramValue"
                         value="100.0"
        >
        </constructor-arg>
        
        <!--    setUserDao001方法参数    -->
        <property name="userDao001"
                  ref="userDao"
        >
        </property>
    </bean>
    
    <bean id="userDao"
          class="com.itheima.dao.impl.UserDaoImpl"
    >
    </bean>
</beans>

测试类UserServiceImpl02Test:

java 复制代码
package com.itheima.service.impl;


import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.itheima.service.interfaces.InterfaceUserService;

import static org.junit.jupiter.api.Assertions.*;


/**
 * @copyright 2003-2025
 * @author    qiao wei
 * @date      2025-04-02
 * @version   1.0
 * @brief     
 * @history   name
 *            date
 *            brief
 */
class UserServiceImpl02Test {
    
    @Test
    public void test02() {
        ClassPathXmlApplicationContext applicationContext =
            new ClassPathXmlApplicationContext("./xml/service/userServiceImpl02.xml");

        InterfaceUserService userService =
            (InterfaceUserService) applicationContext.getBean("serviceImpl02");
        userService.show();
    }
}

运行结果:

java 复制代码
类UserServiceImpl02的show方法。
打印字段数据。userDao:com.itheima.dao.impl.UserDaoImpl@24105dc5,value01:100.0
com.itheima.dao.impl.UserDaoImpl@24105dc5

可见,构造方法,set方法均在创建Bean时根据配置调用。

相关推荐
代码不停10 小时前
JVM基础知识
java·jvm·java-ee
白露与泡影10 小时前
60亿消息表如何分库分表?
java·开发语言·面试
FAFU_kyp10 小时前
银行技术岗位招聘面试题准备
java·spring boot·spring
编程修仙10 小时前
第十篇 文件上传
spring boot·spring
zhangyifang_00910 小时前
Spring中的BeanDefinition
java·后端·spring
不会代码的小猴11 小时前
C++的第十四天笔记
java·开发语言
Heavydrink11 小时前
Java项目部署云服务器详细教程
java·服务器·开发语言
楠枬11 小时前
负载均衡 -LoadBalance
后端·spring·spring cloud·负载均衡
milanyangbo11 小时前
深入解析 Disruptor:从RingBuffer到缓存行填充的底层魔法
java·数据库·后端·架构
yaoxin52112311 小时前
266. Java 集合 - ArrayList vs LinkedList 内存使用深度剖析
java·开发语言