You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Weld SE环境中引导时@Parameters的加载来源及相关问题

关于Weld SE中@Parameters的来源及相关问题解答

一、@Parameters的注入来源

@Parameters是Weld SE专门提供的限定符,用于注入应用启动时的命令行参数,它的加载逻辑和你使用的入口方式直接相关:

  • 当你使用org.jboss.weld.environment.se.StartMain作为程序入口时,这个类会自动捕获启动时的命令行参数,存储到静态变量StartMain#PARAMETERS中。同时,Weld的SE环境扩展会自动将这个参数列表作为一个Bean注册到CDI容器里,所以你能在@Observes ContainerInitialized的方法中直接通过@Parameters List<String>注入参数。
  • 而当你自己编写main方法、手动通过new Weld().initialize()启动容器时,Weld默认不会自动处理命令行参数的注册——因为它不知道你要传递的args是什么,也不会主动捕获。这就是为什么这种方式下无法直接注入@Parameters的原因。

二、手动初始化时如何启用@Parameters注入

如果你想在自定义main方法中也能使用@Parameters注入,需要手动将命令行参数注册为CDI Bean:

import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;
import org.jboss.weld.environment.se.annotations.Parameters;
import java.util.Arrays;
import java.util.List;

public class CustomMain {
    public static void main(String[] args) {
        Weld weld = new Weld();
        // 手动注册带有@Parameters限定符的命令行参数Bean
        weld.addBean()
            .types(List.class)
            .qualifier(new ParametersLiteral())
            .producer(() -> Arrays.asList(args));
        
        WeldContainer container = weld.initialize();
        // 之后就可以正常使用@Parameters注入了
        container.select(MyApplicationBean.class).get().callBusinessMethod();
        container.shutdown();
    }

    // 实现@Parameters的限定符字面量类
    private static class ParametersLiteral extends jakarta.enterprise.util.AnnotationLiteral<Parameters> implements Parameters {}
}

注册完成后,你的Bean就能像第一个示例那样注入@Parameters List<String>了。

三、关闭钩子日志的处理方案

你提到的Weld SE container STATIC_INSTANCE shut down by shutdown hook日志,不需要禁用关闭钩子就能解决——通过调整日志级别即可:

  • 如果使用JDK默认的日志系统,可以在项目的logging.properties中添加配置:
    org.jboss.weld.environment.se.shutdown.hook.level = FINE
    
    把该日志的级别设为FINE(对应DEBUG级别),这样默认的INFO级别输出就不会包含这条日志了。
  • 如果使用SLF4J、Logback等第三方日志框架,只需在对应的配置文件中把org.jboss.weld.environment.se.shutdown.hook的日志级别调整为DEBUG或更低即可。

内容的提问来源于stack exchange,提问作者Martin Mucha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 10:25:44