使用 class.forname 但想要自动装配目标类的成员

2023-12-24

我有这个需求,

我的框架的方式是从配置文件中以字符串形式读取类名,我想使用该类中的方法。

显而易见的解决方案是使用反射, 我已经使用了反射并能够调用我想要的方法,但问题是目标类内的变量没有自动装配。我知道我不会让 spring 通过使用反射来自动连接字段(Spring 使用 class.forname() https://stackoverflow.com/questions/6543620/spring-with-class-forname).

有没有办法让我自动装配类变量而不是创建新实例?或者我陷入了僵局?


Option 1: 如果你可以访问当前的 SpringApplicationContext,您可以按如下方式执行此操作:

String className = <load class name from configuration>
Class<?> clazz = Class.forName(className);

ApplicationContext applicationContext = <obtain Spring ApplicationContext>
applicationContext.getBean(clazz);

这当然意味着您希望加载其实例的类是 Spring 托管 bean。这是一个具体的例子:

package org.example.beans;

@Component
class Foo { ... }

@Component
class SpringApplicationContext implements ApplicationContextAware {
  private static ApplicationContext CONTEXT;

  @Override
  public void setApplicationContext(final ApplicationContext context) throws BeansException
    CONTEXT = context;
  }

  public static <T> T getBean(String className) {
    return CONTEXT.getBean(Class.forName(className));
  }
}

Option 2:您可以手动创建所需类的实例,然后要求 Spring 填充其依赖项。

这再次需要访问ApplicationContext。例如:

T object = Class.forName(className).newInstance();

applicationContext..getAutowireCapableBeanFactory().autowireBean(object);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 class.forname 但想要自动装配目标类的成员 的相关文章

  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 如何在 Spring-JUnit 测试中设置 JNDI 查找?

    我正在使用 Maven 3 0 3 Spring 3 1 0 RELEASE 和 JUnit 4 8 1 如何在容器外部创建 JNDI 功能 在我的例子中是 JBoss 我认为 Spring 的 jndiTemplate 可以解决这个问题
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 通过浏览器关闭页面时出现 Websocket 错误:“已建立的连接被主机中的软件中止”

    我开发了一个实时通知系统Spring 4 代码可以在 Github 上找到 github com vdenotaris Spring Messaging https github com vdenotaris Spring Messagin
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • Android with Retrofit2 OkHttp3 - 多部分 POST 错误

    我在 Android 上使用 Retrofit2 和 OkHttp 进行 HTTP 请求 这里我正在做一个带有文档上传的 POST 请求 我遇到了以下错误 D OkHttp lt 500 Server Error http api driv
  • C# Regex.Match 大括号-仅内容? (不包括大括号)

    我一直无法找到答案 我可以使用Regex Matches方法只返回contents带有大括号的项目 如果我使用正则表达式 my MatchCollection值包括大括号 我想匹配 但只返回内容 这是我到目前为止所拥有的 Regex reg
  • 在Python中以单独显示所有边的方式绘制有向图

    我正在使用 Python 来模拟有向图上发生的过程 我想制作这个过程的动画 我遇到的问题是大多数 Python 图形可视化库将成对的有向边组合成单个边 例如 NetworkX http networkx lanl gov显示下图时仅绘制两条
  • 我怎样才能在 vs 2010 安装项目中为两个不同的发行版本拥有不同的属性等?

    我想要的是我的解决方案中只有一个安装项目 并且我希望能够在一台计算机上同时安装 release1 和 release2 版本 如版本 debug release1 release2 因此 release1 版本需要自己的程序文件夹 产品代码
  • 抓取重定向的页面

    我尝试抓取一个简单的页面 需要欢呼和请求 https www ishares com uk individual en products 251824 https www ishares com uk individual en produ
  • 当 spring.profiles.active 设置多个 Spring 环境配置文件时,优先顺序是什么

    我只是想知道是什么优先顺序是指定多个 Spring 活动配置文件时的顺序 说我想要default配置文件处于活动状态 但dev当有多个相同的元素 例如 bean 可供选择但具有不同的配置文件时 配置文件将覆盖它 比如说我有两个Propert
  • 在 MongoDb 中更新插入字典

    据我所知 mongodb 知道Dictionary作为一个对象 它不能进行任何与数组相关的操作 我更改了序列化并尝试了各种类型的字典序列化 但没有机会 所以我将我的字段 字典 全部 加载到内存中 更新它并将其设置回 mongodb 有什么办
  • setPage() 函数的页码错误:0

    我的 tcpdf 代码是 file to show test details pdf view test details tpl test details smarty gt fetch file to show test details
  • Maven 和 Jenkins - 'mvn' 不被识别为内部或外部命令,

    我正在尝试学习 Jenkins 和 Maven 到目前为止我所做的 安装Maven并设置M2 and M2 HOME作为环境变量 从 eclipse 创建一个简单的 Maven 项目 gt 创建了一个 bat我要移动到的目录中的文件pom
  • 在 React Native WebView 中启用弹出窗口

    我有一个 React Native 应用程序 使用 React Native 0 43 3 它使用 WebView 来显示用于网上银行的网页 该网站加载一个带有登录页面的弹出窗口 对于 ReactNative WebView 此弹出窗口不会
  • 无法从 X509Store 读取 CurrentUser 证书

    我正在开发 ASP NET 4 0 Web 应用程序 我想从 X509Store 读取当前用户证书 读取 LocalMachine 证书工作正常 但如果我将 StoreLocation 设置为 CurrentUser 它会给我一个空集合 下
  • 如何控制何时在 iOS 中提示用户推送通知权限

    我使用 Swift 和 Xcode 6 以及 Parse 框架来处理服务 为 iPhone 构建了一个应用程序 在遵循有关如何设置推送通知的 Parse 教程时 说明建议我将推送通知放在 App Delegate 文件中 这是我添加到应用程
  • 从 PowerShell 使用 .NET 库

    我有一个用于操作数据库的 PowerShell 管理单元 管理单元本身只是在单独的 NET DLL 中实现的主库的包装 所有这些都用 C 编写 我已使用 installutil exe 向 GAC 注册了管理单元和实现 DLL 虽然该管理单
  • 如何使用 robolectric 对 Android 音频录制应用程序进行单元测试

    我只是想知道是否可以使用 Robolectric 框架对 Android 录音机应用程序进行单元测试 据我所知 Robolectric 没有使用模拟器或真实设备进行测试 但是在录音应用程序中 我需要测试音频是否被录制 它是否存储在SD卡上的
  • Spotify Embed iFrame 仅播放歌曲预览

    在我的网站上 即使我登录了 Spotify Premium 我似乎也只能在 Chrome 和 Safari 中播放播放列表中的曲目预览 不过 完整曲目可以在 Firefox 中播放 为什么会出现这种情况呢 这是我的网站 www studif
  • 全屏模式下的 JInternalFrame

    我打算在全屏模式下使用 JInternalFrame 作为模态 JDialog 但是 当前在调用它时并未显示它 我需要将其添加到某个容器中吗 我尝试将其添加到 JOptionPane showInternalMessage 但由于我想让对话
  • 即席查询、存储过程、动态 SQL [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP - 简单 XML - 嵌套层次结构

    我一直在使用 PHP 的简单 XML 函数来处理 XML 文件 下面的代码适用于简单的 XML 层次结构 xml simplexml load file test xml echo xml gt getName br foreach xml
  • 从 pandas 数据框中减去两列并将结果存储在第三列中[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个数据框 df 有 3 列 我想执行减法如下 df available df recommended df man
  • 使用 class.forname 但想要自动装配目标类的成员

    我有这个需求 我的框架的方式是从配置文件中以字符串形式读取类名 我想使用该类中的方法 显而易见的解决方案是使用反射 我已经使用了反射并能够调用我想要的方法 但问题是目标类内的变量没有自动装配 我知道我不会让 spring 通过使用反射来自动