跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Spring 框架 JSR-250 注解详解

Spring 框架支持 JSR-250 标准注解用于 Bean 的生命周期管理和依赖注入。@PostConstruct 和 @PreDestroy 分别替代 init-method 和 destroy-method 定义初始化与销毁回调。@Resource 注解支持按名称注入依赖,可应用于字段或 Setter 方法。通过配置类路径上下文并注册关闭钩子,可确保 Bean 正确执行销毁逻辑。示例展示了如何使用这些注解实现 Hello World 应用的完整生命周期控制。

KernelLab发布于 2018/8/13更新于 2026/10/2487 浏览
Spring 框架 JSR-250 注解详解

Spring 框架还支持基于 JSR-250 标准的注解,主要包括 @PostConstruct、@PreDestroy 和 @Resource。尽管已有其他选择,但这些注解提供了简洁的生命周期管理和依赖注入方式。

@PostConstruct 和 @PreDestroy 注解

为了定义 Bean 的初始化和销毁行为,可以使用 init-method 和 destroy-method 属性声明。init-method 指定实例化后立即调用的方法,destroy-method 指定从容器删除前调用的方法。

也可以使用 @PostConstruct 作为初始化回调的替代,@PreDestroy 作为销毁回调的替代。

示例代码

HelloWorld.java

package com.example;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

public class HelloWorld {
    private String message;

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        System.out.println("Your Message : " + message);
        return message;
    }

    @PostConstruct
    public void init() {
        System.out.println("Bean is going through init.");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("Bean will destroy now.");
    }
}

MainApp.java

package com.example;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public   {
        {
            ();
           (HelloWorld) context.getBean();
        obj.getMessage();
        context.registerShutdownHook();
    }
}
class
MainApp
public
static
void
main
(String[] args)
AbstractApplicationContext
context
=
new
ClassPathXmlApplicationContext
"Beans.xml"
HelloWorld
obj
=
"helloWorld"

Beans.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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <context:annotation-config/>
    <bean id="helloWorld" class="com.example.HelloWorld" init-method="init" destroy-method="destroy">
        <property name="message" value="Hello World!"/>
    </bean>
</beans>

运行程序后的预期输出如下:

Bean is going through init.
Your Message : Hello World!
Bean will destroy now.

@Resource 注解

可以在字段或 Setter 方法中使用 @Resource 注解,其运作机制与 Java EE 5 一致。@Resource 使用 name 属性以 Bean 名称形式进行注入,遵循按名称自动连接语义。

示例代码

package com.example;
import javax.annotation.Resource;

public class TextEditor {
    private SpellChecker spellChecker;

    @Resource(name = "spellChecker")
    public void setSpellChecker(SpellChecker spellChecker) {
        this.spellChecker = spellChecker;
    }

    public SpellChecker getSpellChecker() {
        return spellChecker;
    }

    public void spellCheck() {
        spellChecker.checkSpelling();
    }
}

若未明确指定 name,默认名称源于字段名或 Setter 方法名。字段情况下使用字段名,Setter 方法情况下使用 Bean 属性名称。

目录

  1. @PostConstruct 和 @PreDestroy 注解
  2. 示例代码
  3. @Resource 注解
  4. 示例代码

更多推荐文章

查看全部
  • 单链表综合实战:删除指定节点、反转链表与查找中间节点
  • VS Code 配置 GitHub Copilot Agent Skills 实战指南
  • 前端路由权限拦截实战:Vue 与 React 三种方案对比
  • AI 赋能医疗设备改造:核心路径、挑战与未来趋势
  • Windows 10/11 部署 OpenClaw 机器人控制框架指南
  • ESP32 无人机合规识别:ArduRemoteID 开源方案详解
  • Milvus 实战:Attu 可视化安装与 Python 整合指南
  • VSCode 中关闭 GitHub Copilot 功能
  • Claude Code 提升效率的 Superpower 与记忆插件实战指南
  • MySQL 数据库基础入门:从概念到实战
  • Qt 与 Web 混合编程:CEF 与 QCefView 深度解析
  • 如何在 Cursor 中使用 MCP 服务
  • AIGC 情感化智能客服实战:投诉率优化技术方案
  • Rust WebAssembly 开发实战:构建高性能前端应用
  • 小米手机端智能体落地,破解智能家居被动执行困局
  • WorkBuddy 使用指南:从零开始配置 QQ 机器人,解锁桌面智能体新玩法
  • MySQL 详细安装配置完整教程
  • 滑动窗口算法详解:水果成篮问题解法
  • LangChain 消息处理:缓存、过滤、合并与流式输出
  • 单链表核心操作全实现与指针思维精讲

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online