当前位置: 首页 > 面试题库 >

如何使Spring注入值进入静态场

杜砚
2023-03-14
问题内容

我知道这看起来像是一个先前提出的问题,但是我在这里面临另一个问题。

我有一个只有静态方法的实用程序类。我不会,也不会从中获得实例。

public class Utils{
    private static Properties dataBaseAttr;
    public static void methodA(){

    }

    public static void methodB(){

    }
}

现在我需要Spring用数据库属性Properties填充dataBaseAttr.Spring的配置是:

<?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:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

<util:properties id="dataBaseAttr"
        location="file:#{classPathVariable.path}/dataBaseAttr.properties" />
</beans>

我已经在其他bean中做到了,但是此类(Utils)中的问题不是bean,如果我将其变成bean,则没有任何变化,但我仍然无法使用变量,因为该类不会被实例化并且总是变量等于null。


问题答案:

你有两种可能性:

  1. 静态属性/字段的非静态设置器;
  2. 通过org.springframework.beans.factory.config.MethodInvokingFactoryBean调用静态的制定者。
    在第一个选项中,你有一个带有常规setter的bean,但设置实例属性的是设置静态属性/字段。
public void setTheProperty(Object value) {
    foo.bar.Class.STATIC_VALUE = value;
}

但是为了做到这一点,你需要有一个将实例化此setter的bean实例(它更像一个变通方法)。

在第二种情况下,将执行以下操作:

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="staticMethod" value="foo.bar.Class.setTheProperty"/>
    <property name="arguments">
        <list>
            <ref bean="theProperty"/>
        </list>
   </property>
</bean>

根据你的情况,你将在Utils课程上添加一个新的二传手:

public static setDataBaseAttr(Properties p)

并且在你的上下文中,你将使用上述示例性方法对其进行配置,大致类似:

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="staticMethod" value="foo.bar.Utils.setDataBaseAttr"/>
    <property name="arguments">
        <list>
            <ref bean="dataBaseAttr"/>
        </list>
   </property>
</bean>


 类似资料:
  • 问题内容: 如果我尝试,它始终为“ null”。所以我尝试了这个。 此代码有效。Sample.name设置正确。这是好方法吗?如果没有,还有什么更好的方法吗?以及如何做? 问题答案: 首先,非领域是邪恶的。由于某种原因,Spring不允许注入此类字段。 你的解决方法是有效的,甚至不需要字段就足够了。另一方面,请尝试以下操作: (与一起使用)。但是给你一些建设性的建议:用和代替 创建第二个类。

  • 问题内容: 在我的一个班级中,有一个成员,我需要在!中设置该值 !也就是说,我们是否可以为此静态属性注入一个值? 问题答案: 是的,此链接上有一个示例http://planproof-fool.blogspot.com/2010/03/spring-setting-static- fields.html

  • 我是Guice注入的新手。如何将类注入到将在静态方法中使用的静态变量中? 这是我想在 doLocalize() 方法中使用注入的变量 b 的类。 这是我想要对其执行guice注入的模块类。 注意:我不能改变我的模块和B类,因为它来自另一个依赖项。 我想在我的A类中注入的类

  • 我有一组仅包含静态方法和单个私有构造函数的API类,因此它们无法实例化。但是,我希望第三方开发人员能够修改API的行为以满足他们的需求。 这是我目前为止的解决方案(通过静态setter方法进行依赖注入)。这是开发人员将使用的公共API类。如您所见,它依赖于< code>StaticApiImpl。 这是我自己编码的默认API实现。 这是第三方可能编写的默认实现的假设扩展版本: 开发者只需在插件初始

  • 本文向大家介绍spring 如何将配置信息注入静态变量的方法,包括了spring 如何将配置信息注入静态变量的方法的使用技巧和注意事项,需要的朋友参考一下 我们学习过将配置信息,通过@Value()的方法注入到对象的变量。这是由于对象是由spring来托管的。那么非spring如果,我们需要在静态方法中,使用配置文件中的值,又该怎么做呢? 传统的错误作法 application.propertie

  • 问题内容: Spring 是否可以在不扩展的情况下将JPA 对象注入到我的DAO类中?如果是,在这种情况下,Spring是否管理事务? 我试图使我的Spring配置尽可能简单: 问题答案: 是的,尽管它充满了陷阱,但由于JPA有点特殊。在代码中没有显式的Spring依赖关系的情况下,非常值得阅读有关注入JPA 和的文档: http://static.springsource.org/spring/