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时根据配置调用。

相关推荐
H_HX1266 分钟前
IDEA的下载和安装
java·intellij-idea·idea
AIGS0017 分钟前
向量空间JBoltAI:本体语义如何跨越企业AI的语义鸿沟
java·大数据·人工智能·人工智能ai大模型应用
r_oo_ki_e_11 分钟前
Java 线程池
java·开发语言
日月云棠13 分钟前
Spring 源码深度剖析:DispatcherServlet 的自动化注册机制
java·后端
Jazz_z1 小时前
通过 Java 实现 Word 转 TXT
java·c#·word
SamDeepThinking1 小时前
为什么我会主动给一个年轻程序员加薪、晋升?
java·后端·程序员
ikun_文2 小时前
Java面向对象编程OOP核心知识
java
宠友信息2 小时前
MySQL 租户数据隔离在即时通讯源码后端中的落地方式
java·数据库·spring boot·redis·websocket·mysql
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题 第163题】【06_Spring篇】第23题:说说SpringBoot 自动配置原理?
java·自动配置·springboot·spi·条件注解
江湖有缘2 小时前
【保姆级教程】使用Docker Compose一键搭建Picsur私有图床服务
java·docker·容器