当前位置: 首页 > news >正文

spring:实例化类过程中方法执行顺序。

如题。在实例化Bean时,会根据配置依次调用方法。在此测试代码如下:

在测试类中继承接口InitializingBean,接口InterfaceUserService(该接口为自定义,只是定义set方法)。

InterfaceUserService,接口InterfaceUserDao不影响测试,

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);
}

测试类UserServiceImpl02

package com.itheima.service.impl;import org.springframework.beans.factory.InitializingBean;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, InitializingBean {public UserServiceImpl02() {System.out.println("类UserServiceImpl02调用无参构造函数。");}public UserServiceImpl02(InterfaceUserDao paramUserDao, double paramValue) {this.userDao = paramUserDao;this.value01 = paramValue;System.out.println("调用带参构造方法");
//        paramUserDao.print();
//        System.out.println("类UserServiceImpl02调用有参构造函数。---" + userDaoABC);
//        System.out.println(value01);}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("实现接口InitializingBean的方法afterPropertiesSet");}@Overridepublic void show() {System.out.println("类UserServiceImpl02的show方法。");System.out.println("打印字段数据。userDao:" + userDao + ",value01:" + value01);System.out.println(userDaoABC);}@Overridepublic void setUserDao001(InterfaceUserDao userDao) {System.out.println("调用属性设置方法。");this.userDaoABC = userDao;}private InterfaceUserDao userDao;private InterfaceUserDao userDaoABC;private double value01;
}

配置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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsd"><bean id="serviceImpl02"class="com.itheima.service.impl.UserServiceImpl02"><!--    构造方法参数    --><constructor-argname="paramUserDao"ref="userDao"></constructor-arg><constructor-argname="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>

Test类

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 {@Testpublic void test02() {ClassPathXmlApplicationContext applicationContext =new ClassPathXmlApplicationContext("./xml/service/userServiceImpl02.xml");InterfaceUserService userService =(InterfaceUserService) applicationContext.getBean("serviceImpl02");
//        userService.show();}
}

运行结果如下:

在xml文件中没有配置init-method,如果配置了,应在方法afterPropertiesSet之后被调用。注意,因为在xml配置了构造方法的参数,所以在有无参、有参两个构造方法的情况下,调用了有参构造方法。

如果将xml文件中的构造方法参数注释掉,则运行结果自动调用无参构造方法。

注释掉的xml文件内容

运行结果:

所以在创建Bean'实例时,方法调用顺序如下:

构造方法

set***方法

接口InitializingBean的方法afterPropertiesSet。(如果继承接口 InitializingBean)。

xml配置的init-method方法。

 

http://www.lqws.cn/news/177139.html

相关文章:

  • 【idea】分享一个关于Maven依赖管理好用的插件
  • Caliper 负载(Workload)详细解析
  • 动手学深度学习12.7. 参数服务器-笔记练习(PyTorch)
  • 进程的详解,命令行参数,程序的地址空间(Linux)
  • 服务器数据恢复—服务器raid5阵列崩溃如何恢复数据?
  • 飞牛使用Docker部署Tailscale 内网穿透教程
  • Linux命令基础(2)
  • 构建 MCP 服务器:第 4 部分 — 创建工具
  • 深入解析:为什么 Redis 比 MySQL 快
  • Linux虚拟机
  • 如何通过外网访问内网服务器?怎么让互联网上连接本地局域网的网址
  • 构建 MCP 服务器:第 3 部分 — 添加提示
  • 智能心理医疗助手开发实践:从技术架构到人文关怀——CangjieMagic情感医疗应用技术实践
  • 【Maven打包错误】 Fatal error compiling: 错误: 不支持发行版本 21
  • MongoDB检查慢查询db.system.profile.find 分析各参数的作用
  • MongoDB学习和应用(高效的非关系型数据库)
  • Cursor 1.0正式推出:全面解析你的AI 编程助手
  • for AC500 PLCs 3ADR025003M9903的安全说明
  • uni-app 项目支持 vue 3.0 详解及版本升级方案?
  • coze平台创建智能体,关于智能体后端接入的问题
  • 文件上传漏洞深度解析:检测与绕过技术矩阵
  • 鸿蒙图片缓存(一)
  • Python读取PDF:文本、图片与文档属性
  • 《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
  • Tika Server:企业级文档内容解析的轻量级服务化方案
  • CppCon 2015 学习:How to Make Your Data Structures Wait-Free for Reads
  • 【iOS安全】iPhone X iOS 16.7.11 (20H360) WinRa1n 越狱教程
  • 主流 AI IDE 之一的 Cursor 介绍
  • 2506,字节对齐
  • 【配置 YOLOX 用于按目录分类的图片数据集】