news 2026/7/28 5:48:35

【Java】Bean的生命周期——print大法带你了解Bean的生命周期(初探)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Java】Bean的生命周期——print大法带你了解Bean的生命周期(初探)

、定义一个Student类#

为了方便看到生命周期过程,我直接使用print大法;

另外,将类交给Spring容器管理可以通过xml文件形式和注解形式,接下来我都实现一下

1、xml形式#

package com.goahead.bean;

public class Student1 {

private String name;

public Student1() {

System.out.println("1、实例化");

}

public Student1(String name) {

this.name = name;

}

public void setName(String name) {

System.out.println("2、依赖注入");

this.name = name;

}

public void myInit() {

System.out.println("3、初始化");

}

public void myDestroy() {

System.out.println("5、销毁");

}

}

2、注解形式#

package com.goahead.bean;

import org.springframework.stereotype.Component;

import org.springframework.beans.factory.annotation.Value;

import javax.annotation.PostConstruct;

import javax.annotation.PreDestroy;

@Component

public class Student2 {

private String name;

public Student2() {

System.out.println("1、实例化");

}

public Student2(String name) {

this.name = name;

}

@Value("goahead")

public void setName(String name) {

System.out.println("2、依赖注入");

this.name = name;

}

@PostConstruct

public void myInit() {

System.out.println("3、初始化");

}

@PreDestroy

public void myDestroy() {

System.out.println("5、销毁");

}

}

二、将Student类交给Spring容器#

1、xml文件形式#

需要在resource文件夹下定义一个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"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="student" class="com.goahead.bean.Student" init-method="myInit" destroy-method="myDestroy">

<property name="name" value="goahead"/>

</bean>

</beans>

2、注解形式(推荐)#

注解形式我们只需在Student2类上加相应的注解,然后加一个配置类

在config目录下创建一个 AppConfig类

package com.goahead.config;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

@Configuration

@ComponentScan("com.goahead.bean") // 扫描包路径

public class AppConfig {

}

三、测试#

由于我们第二步实现了两种方式,所以测试也对应两种方式

1、对应xml形式#

import com.goahead.bean.Student1;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AppTest1 {

@Test

public void test1() {

ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

Student1 student1 = context.getBean(Student1.class);

System.out.println("4、使用Bean");

((ClassPathXmlApplicationContext)context).close();

}

}

2、注解形式#

import com.goahead.bean.Student2;

import com.goahead.config.AppConfig;

import org.junit.Test;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class AppTest2 {

@Test

public void test2() {

// 使用AnnotationConfigApplicationContext替代ClassPathXmlApplicationContext

AnnotationConfigApplicationContext context =

new AnnotationConfigApplicationContext(AppConfig.class);

Student2 student = context.getBean(Student2.class);

System.out.println("4、使用Bean");

context.close(); // 触发销毁方法

}

}

四、测试结果#

1、xml形式#

image

2、注解形式#

image

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/26 16:42:01

中国移动中兴云电脑W132D-RK3528-2+32G_安卓9_ADB开启线刷包

中国移动中兴云电脑W132D-RK3528-232G_安卓9_ADB开启线刷包 往期固件&#xff1a; 参考&#xff1a;中国移动中兴云电脑W132D-RK3528-232G-刷机固件包&#xff08;非原机制作&#xff09; 链接&#xff1a;https://blog.csdn.net/fatiaozhang9527/article/details/151287241?o…

作者头像 李华
网站建设 2026/7/28 20:33:15

深度学习python项目--垃圾图像分类识别 关键模型:VGG19DenseNet121Res...

深度学习python项目--垃圾图像分类识别 关键模型:VGG19DenseNet121ResNeXt101 包含内容:数据集ppt文档代码搞图像分类项目的时候&#xff0c;选模型总让人头大。这次垃圾识别项目我试了三个经典CNN架构&#xff1a;VGG19、DenseNet121和ResNeXt101。这三个老将放在垃圾数据集上…

作者头像 李华
网站建设 2026/7/28 21:54:45

3000亿参数AI大模型部署终极指南:4步实现低成本企业级应用

3000亿参数AI大模型部署终极指南&#xff1a;4步实现低成本企业级应用 【免费下载链接】ERNIE-4.5-300B-A47B-W4A8C8-TP4-Paddle 项目地址: https://ai.gitcode.com/hf_mirrors/baidu/ERNIE-4.5-300B-A47B-W4A8C8-TP4-Paddle 在AI大模型技术快速发展的今天&#xff0c;…

作者头像 李华
网站建设 2026/7/27 5:05:20

Manim 3D螺旋动画:从DNA到宇宙的数学可视化之旅

Manim 3D螺旋动画&#xff1a;从DNA到宇宙的数学可视化之旅 【免费下载链接】manim A community-maintained Python framework for creating mathematical animations. 项目地址: https://gitcode.com/GitHub_Trending/man/manim 想象一下&#xff0c;你能用代码编织出…

作者头像 李华
网站建设 2026/7/26 12:09:32

基于Simulink的UR5机械臂的变阻抗控制及平面力跟踪仿真

基于位置的阻抗控制&#xff0c;自适应变阻抗控制&#xff0c;平面力跟踪仿真&#xff0c;有结果图&#xff0c;simscape simulink matlab&#xff0c;机械臂采用ur5直接上干货。咱今天聊机械臂的力控制&#xff0c;拿UR5当例子&#xff0c;在Simulink里搞基于位置的阻抗控制。…

作者头像 李华
网站建设 2026/7/21 11:22:26

快速上手Codebox:开源云端IDE的终极配置指南

快速上手Codebox&#xff1a;开源云端IDE的终极配置指南 【免费下载链接】codebox Open source cloud & desktop IDE 项目地址: https://gitcode.com/gh_mirrors/co/codebox Codebox是一款功能强大的开源云端和桌面集成开发环境&#xff0c;让你在本地或云端都能享受…

作者头像 李华