当前位置: 首页 > 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方法。

 

相关文章:

  • tpc udp http
  • 鸿蒙开发——如何修改模拟器的显示图标/标题
  • React-表单受控绑定和获取Dom元素
  • ​​高频通信与航天电子的材料革命:猎板PCB高端压合基材技术解析​​
  • ✅ 常用 Java HTTP 客户端汇总及使用示例
  • C#子线程更新主线程UI及委托回调使用示例
  • openLayers实现实时轨迹
  • 【HarmonyOS 5】出行导航开发实践介绍以及详细案例
  • 29.【新型数据架构】-边缘计算数据架构
  • 边缘计算网关提升水产养殖尾水处理的远程运维效率
  • Windows系统中如何使用符号链接将.vscode等配置文件夹迁移到D盘(附 CMD PowerShell 双版本命令)
  • 摆脱硬件依赖:SkyEye在轨道交通中的仿真应用
  • hbuildx运行uzapp项目初始化配置
  • day35-系统编程之网络编程IV及MQTT协议
  • 相机Camera日志分析之二十七:高通相机Camx 基于预览1帧的process_capture_result二级日志分析详解
  • AI系统提示词:V0
  • PDF转Markdown/JSON软件MinerU最新1.3.12版整合包下载
  • Chrome安装代理插件ZeroOmega(保姆级别)
  • [大A量化专栏] VMware (mac本地跑QMT)
  • Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
  • 服务器可以做网站吗/搜索引擎优化核心
  • 网站怎么做最省钱/昆山网站建设推广
  • 蓝色大气企业网站phpcms模板/品牌传播推广方案
  • 怎么 给自己的网站做优化呢/广州百度网站快速排名
  • 模仿网站制作/seo课程心得体会
  • wordpress+增加域名/seo视频网页入口网站推广