Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用运行时值进行Spring上下文初始化

使用运行时值进行Spring上下文初始化
EN

Stack Overflow用户
提问于 2021-04-15 22:16:29
回答 1查看 31关注 0票数 0

我正在尝试将Spring集成到一个独立的Swing应用程序中。

Swing应用程序在启动时要求提供登录详细信息,然后应该使用这些信息来创建一个单独的DataSource Bean。

但是,我想不出一种方法在初始化期间将这些登录信息(作为Java object)传递给Spring (然后再传递给@Bean ApplicationContext方法)。

有什么想法吗?

可能的解决方案:

代码语言:javascript
运行
AI代码解释
复制
@SpringBootApplication
public class DemoSwingApplication {
  public static void main(final String[] args) {
    ...

    final var loginInfo = buildLoginInfo();

    try (final var context = new AnnotationConfigApplicationContext()) {
      context.getBeanFactory().registerSingleton("loginInfo", loginInfo);
      context.register(DemoSwingApplication.class);
      context.refresh();
    }
  }
}
EN

回答 1

Stack Overflow用户

发布于 2021-04-15 23:06:59

有多种方法可以做到这一点,

使用BeanDefinitionRegistryPostProcessor的-创建将实现BeanDefinitionRegistryPostProcessor的bean,然后存储BeanDefinitionRegistry实例并动态注册您的bean。

代码语言:javascript
运行
AI代码解释
复制
@Component
public class DbConfigurer implements BeanDefinitionRegistryPostProcessor, BeanFactoryAware {

    private BeanDefinitionRegistry beanDefinitionRegistry;

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
        this.beanDefinitionRegistry = beanDefinitionRegistry;
    }

    public void registerDataSourceBean() {
        beanDefinitionRegistry.registerBeanDefinition("dataSource", new RootBeanDefinition(DataSource.class,
                BeanDefinition.SCOPE_SINGLETON, yourDataSourceBeanSupplier));
    }
}

使用BeanFactoryAware-这类似于您提供的实现,但通过实现BeanFactoryAware接口,但缺点是检查BeanFactory实例-

代码语言:javascript
运行
AI代码解释
复制
@Component
public class DbConfigurer implements BeanDefinitionRegistryPostProcessor, BeanFactoryAware {

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) beanFactory; // Need to cast
    }
}

然后在您的UI组件中,注入此And,并在配置属性可用时注册bean -

代码语言:javascript
运行
AI代码解释
复制
@Component
public class MainWindow extends JFrame {

    private final DbConfigurer dbConfigurer;

    // register bean once user provides config properties
}

并在禁用headless模式的情况下启动应用程序-

代码语言:javascript
运行
AI代码解释
复制
@SpringBootApplication
public class DesktopApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(DesktopApplication.class).headless(false).run(args);
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67116657

复制
相关文章
IDEA无法使用Spring Initializr进行初始化解决
最近在学习SpringBoot,当我在使用Spring Initializr 从spring.io下载初始化项目的时候,出现下面的报错,我把系统代理开全局和规则都试了,还是无法从IDEA里面连接上spring.io,但我在浏览器里可以直接进,按照报错提示解决了,解决方案如下。
Aomsir
2022/12/06
1.6K0
IDEA无法使用Spring Initializr进行初始化解决
Spring MVC 上下文(ApplicationContext)初始化入口
应该来说是很少使用这种方法用于生产开发,常常在学习Spring做demo的时候会使用到。更有可能出现在Spring项目的代码测试,不过呢,单元测试的框架(比如 JUnit)已经提供了简单的方式,也就不建议直接实例化上下文。因为实例化一个上下文还得要做维护,再者现在常用的是基于Web的开发,也就是常用 Spring MVC。如果没有基于 Web 应用的开发,那么很可能就是一个小的程序,类似于提供给第三方使用的 SDK 代码,那么使用 Spring 感觉会太重,最重要是自己要维护一个 ApplicationContext,感觉不是那么方便
用户3148308
2018/09/13
2K0
SpringBoot运行源码分析:Spring应用上下文创建
经过以上步骤,ConfigurableEnvironment 的初 始化和准备工作已经完成。之后,程序又对环境中的忽略信息配置项“spring.beaninfo.ignore”的值进行获取判断,进而设置为系统参数中的忽略项。
愿天堂没有BUG
2022/10/28
6330
SpringBoot运行源码分析:Spring应用上下文创建
SpringBoot运行源码分析:Spring应用上下文准备
我们在上一节完成了应用上下文的创建工作,SpringApplication 继续通过 prepareContext方法来进行应用上下文的准备工作。首先,通过图 4-4 来整体了解一下 prepareContext 的核心功能及流程。
愿天堂没有BUG
2022/10/28
2520
SpringBoot运行源码分析:Spring应用上下文准备
使用Spring Boot进行参数校验
在Spring Boot的官网中,关于Validation只是简单的提了一句,如下
用户1093975
2019/03/04
8870
使用Spring Boot进行参数校验
使用Spring Boot进行参数校验
原文:cnblogs.com/cjsblog/p/8946768.html 编辑自公众号:Java后端
好好学java
2019/10/29
1.2K0
使用Spring Boot进行参数校验
使用Spring Batch进行批量处理
在Java后端开发中,批量处理是一个非常常见的需求。例如,我们需要从数据库中读取大量数据,对这些数据进行处理,然后将处理后的结果写回到数据库中。这时候,使用Spring Batch框架可以帮助我们快速地实现批量处理的功能。
程序猿川子
2023/06/06
1.1K0
Spring框架参考手册_5.0.0_中文版_Part II_3.6
文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书
Tyan
2022/05/09
4080
spring上下文工具类
众所周知,spring是目前来说最好的java框架,使用spring开发程序省去了我们很多繁杂的工作,比如说自己管理bean声明周期,依赖注入等。我们平时除了依赖框架开发之外,spring同时提供了一些接口供开发者使用,这样的话我们的自己的程序就可以交给spring容器管理,或者说使用spring的很多功能,常见的ApplicationContext和InitialingBean等,接下来将简单介绍ApplicationContext的应用场景和使用姿势:
叔牙
2020/11/19
8330
spring上下文工具类
Spring MVC使用ModelAndView进行重定向
使用servlet重定向有两种方式,一种是forward,另一种就是redirect。forward是服务器内部重定向,客户端并不知道服务器把你当前请求重定向到哪里去了,地址栏的url与你之前访问的url保持不变。redirect则是客户端重定向,是服务器将你当前请求返回,然后给个状态标示给你,告诉你应该去重新请求另外一个url,具体表现就是地址栏的url变成了新的url。
kirin
2021/03/25
2.8K0
[翻译]使用Spring Boot进行单元测试
编写好的单元测试可以被看成一个很难掌握的艺术。但好消息是支持单元测试的机制很容易学习。
伍六七AI编程
2022/03/23
2.5K0
Spring 使用注解进行 Bean 管理 | Spring学习笔记2.0
在src下创建一个 club.teenshare.bean 的包,并再创建一个 User 的类
做棵大树
2022/09/27
2560
使用kotlinc、kotlin、java命令进行kotlin程序运行
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
易寒
2022/02/07
1.4K0
使用Maven创建Spring Boot应用及运行
它只是一个简单的非Spring Boot应用,需自行添加Spring Boot应用所依赖的jar包,编写启动类等。
星哥玩云
2022/09/14
6990
使用Maven创建Spring Boot应用及运行
【小家Spring】Spring MVC容器启动时,web九大组件初始化详解(Spring MVC的运行机制)
为了更好的去理解Spring MVC的工作机制,这边博文我们主要讲述Spring MVC在初始化的时候(容器启动的时候),做的一些准备工作。
YourBatman
2019/09/03
1.8K0
【小家Spring】Spring MVC容器启动时,web九大组件初始化详解(Spring MVC的运行机制)
spring-boot使用aop进行日志记录
运行项目,然后访问上述controller,然后查看控制台和数据库中相应的表是否有对应数据
earthchen
2020/09/24
9040
Spring Cloud 使用 Nacos 进行服务注册发现
上一篇我们实现了Spring Cloud从nacos server 远端拉取并加载配置。今天我将给大家介绍nacos的另一个重要功能服务注册与发现。服务注册与发现功能在微服务中服务治理的基础。本篇将对nacos的服务治理进行介绍和一些入门使用。
码农小胖哥
2019/12/05
1.1K0
Spring Data JPA中使用QueryDSL进行查询
插件的作用是把带有@Entity注解的实体类在指定路径target/generated-sources/java下生成一个衍生的实体类,我们后面就是用这个衍生出来的实体类去构建动态查询的条件进行动态查询。
砒霜拌辣椒
2023/08/23
2.1K0
Spring Data JPA中使用QueryDSL进行查询
使用Sentinel对Spring MVC接口进行限流
Spring Cloud Alibaba提供了中间件Sentinel,它以流量为切入点,提供了流量控制、熔断降级、系统负载保护等多个功能来保护服务的稳定性。今天就来尝试一下。
码农小胖哥
2020/10/10
2.1K0
使用Sentinel对Spring MVC接口进行限流
点击加载更多

相似问题

使用Spring的运行时值注入?

11

在spring上下文初始化之前运行代码

20

控件何时使用它们的设计时值进行初始化?

10

是否使用特定值初始化运行时值类型数组?

40

如何使用包含运行时值的委托初始化事件?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档