SPRING:在 Spring 中由工厂实例化创建的 bean 中使用自动装配

2024-01-16

您好,我无法在另一个使用工厂方法实例化的 bean 中自动装配我的 bean。

class A{

    private String name;

    //getters and setters for name
}

class B{

    @Autowired
    private A x;

    private B(String Gender, String jobProfile){
        String name = x.getName();
       //some code
    }

    public static getInstance(String Gender,String jobProfile){
        //some code for instantiation.
    }
}        

现在,当我使用工厂方法从某个不同的类创建类 B 的实例时。自动装配不会发生,它返回 NULL,即 x 为 null。因此,我在调用 getName 时遇到空指针异常

你有什么解决办法吗?或者我做错了什么?


当您通过 new 创建对象时,autowire\inject 不起作用...

作为解决方法,您可以尝试以下操作:

并以这种方式创建一个实例

context.getBean("myBean");

原型:这将单个 bean 定义范围限定为具有任意数量的对象实例。


Config

<bean id="a" class="..." >
<bean id="b" class="..." scope="prototype">
<bean id="factory" class="..." >

工厂类

public class Factory implements ApplicationContextAware {

    private ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {
        this.applicationContext = applicationContext;
    }

    public B createClass(){
        context.getBean("b");
    }

    public B createClass(Object... args){
        context.getBean("b",args);
    }

    }

这样自动连线注释就可以正常工作。

正如 Javadocs 所说 getBean ..

/**
     * Return an instance, which may be shared or independent, of the specified bean.
     * <p>Allows for specifying explicit constructor arguments / factory method arguments,
     * overriding the specified default arguments (if any) in the bean definition.
     * @param name the name of the bean to retrieve
     * @param args arguments to use if creating a prototype using explicit arguments to a
     * static factory method. It is invalid to use a non-null args value in any other case.
     * @return an instance of the bean
     * @throws NoSuchBeanDefinitionException if there is no such bean definition
     * @throws BeanDefinitionStoreException if arguments have been given but
     * the affected bean isn't a prototype
     * @throws BeansException if the bean could not be created
     * @since 2.5
     */
    Object getBean(String name, Object... args) throws BeansException;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SPRING:在 Spring 中由工厂实例化创建的 bean 中使用自动装配 的相关文章

随机推荐

  • 如何清除Chromium浏览器的图标缓存

    我更新了浏览器选项卡上显示的网站图标 我清除了chromium浏览器 Ubuntu版本的Chrome 的数据 清除浏览数据 gt 选择 从头开始 并检查所有内容 gt 单击 清除浏览数据 然而 我仍然得到我的旧图标 知道如何清除该缓存吗 在
  • Android 强制 HDMI 音频

    当我的 ADT 1 连接到电视时 无法通过 HDMI 播放声音 在该特定电视上 我必须在 Raspberry PI 上强制使用 HDMI 音频 因此我也尝试在 ADT 1 上强制使用它 我尝试制作一个具有许可的应用程序
  • Wii 编程教程 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Jackson Mapper 具有特殊字符 é 问题

    你好 我有一个网页 它提交了一个像这样的字符Jos Luis Calleja Garcia 但在服务器中它被转换为Jos Luis Calleja Garcia 我不知道我做错了什么 我应该设置什么配置才能得到它Jos Luis Calle
  • 如何在 Perl 一行中获取当前文件的文件名

    是否可以像下面这样在 Perl 单行代码中获取当前文件名 从文件列表中 perl lane if my value print txt 变量的名称是 ARGV 您可以在以下位置找到相关信息 佩尔瓦尔 ARGV http perldoc pe
  • 为泛型函数专门化一个类型

    鉴于这个定义 declare function foo
  • 如何使用android数据绑定设置SwipeRefreshLayout刷新属性?

    我正在使用 Android 数据绑定库 如果我想让视图可见 我可以这样写
  • CSS:100% 表格的 内的中心文本区域

    现在 我有一个 100 宽度的表格 其中包含 2 列 其中有一个文本区域 用户可以在其中输入文本 table border collapse collapse width 100 border 1px solid black table l
  • 当依赖项被锁定时发现 Composer 软件包的最新版本

    假设我有一个composer json具有锁定依赖项的文件 require zendframework zendframework 2 4 2 require dev phpunit phpunit 4 6 6 我想这样做是因为我想手动更新
  • R - 将向上对角线转换为行

    我得到一个矩阵 数据框或数据表 我想创建一个矩阵 其中向上 反向对角线作为行 其余单元格作为 NA 我能够做到这一点 但我认为 应该有一个更容易 更简单的解决方案 因此 任何解决方案都值得赞赏 作为一个例子 假设我得到以下 data tab
  • Grails 服务类交叉引用

    我意识到 Grails 服务类是 Spring 管理的单例 我还知道 您可以通过像这样的驼峰式大小写形式使用 serviceClassName 声明本地定义来引用另一个服务类 令我惊讶的是 我似乎无法像这样交叉引用服务类 class Fir
  • jsTree:如何从jstree中获取所有叶节点?

    我想从 jsTree 获取所有叶节点 节点的 ID 和文本 我没有使用复选框 ui jsTree Root A A1 A1 1 A2 A2 1 B B2 C C1 C1 1 我想要 jsTree 的叶节点列表 预期输出 A1 1 A2 1
  • Google Drive API 如何支持下载请求的内容范围? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Google Drive API 如何支持获取内容范围请求 App Engine 获取请求大小有限制 请支持范围请求 以便可以读取大文件 您可以提供
  • __unicode__() 不返回字符串

    我在 python 中有以下课程 class myTest def init self str self str str def unicode self return self str 并在其他一些文件中实例化 myTest 来尝试 un
  • Excel 单元格中的 OpenXml 和日期格式

    我正在尝试使用 OpenXML 创建 xlsx 格式的 Excel 文件 因为我需要在 Web 服务器上使用它 我在表格中填写数值没有任何问题 但是我正在努力在单元格中设置经典的日期格式 下面使用快速测试DocumentFormat Ope
  • 类型错误:预期序列或类似数组,得到估计器

    我正在开发一个对产品有用户评论的项目 除了我手动提取的一些其他特征之外 我正在使用 TfidfVectorizer 从数据集中提取特征 df pd read csv reviews csv header 0 FEATURES feature
  • 根据屏幕尺寸缩放字体大小?

    我正在使用 AngularJS 1 x 和 Angular Material 开发一个 Web 应用程序 我正在尝试创建一个带有大标题的登陆页面md display 4 它看起来是这样的 正如您所看到的 标题很好地填充了页面并且适合一行 然
  • 如何在 iOS 地图上叠加一个圆圈

    我有一个半径和一个位置 这就是我试图获取圆的边界矩形的方法 MKMapRect boundingMapRect CLLocationCoordinate2D tmp MKCoordinateSpan radiusSpan MKCoordin
  • Laravel 5.4 - 如何对同一自定义验证规则使用多个错误消息

    为了重用代码 我在名为的文件中创建了自己的验证器规则验证服务提供者 class ValidatorServiceProvider extends ServiceProvider public function boot Validator
  • SPRING:在 Spring 中由工厂实例化创建的 bean 中使用自动装配

    您好 我无法在另一个使用工厂方法实例化的 bean 中自动装配我的 bean class A private String name getters and setters for name class B Autowired privat