Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将属性注入静态final字段_Java_Spring - Fatal编程技术网

Java 将属性注入静态final字段

Java 将属性注入静态final字段,java,spring,Java,Spring,我有一个处理事件的类: public abstract class EventExecutor { public static final EventExecutor ON_BALANCE_CHANGE_EXECUTOR = new EventExecutor() { private BalanceDao balanceDao; @Override public void executeEvent() { Bi

我有一个处理事件的类:

public abstract class EventExecutor {

    public static final EventExecutor ON_BALANCE_CHANGE_EXECUTOR = new EventExecutor() {

        private BalanceDao balanceDao;

        @Override
        public void executeEvent() {
            BigDecimal balance;
            //getting the balance
            balanceDao.add(balance);
        }

        //GET, SET, others
    };

    public abstract void executeEvent();
}
处理一些事件意味着将一些数据保存到持久性存储中。因为我使用Spring4,所以需要执行相应的依赖项注入,以便执行
db
-操作

目前,我打算允许客户端通过调用静态final字段上的方法来执行事件处理,以提高代码的可读性

因此,可以通过
ContextLoader.getCurrentWebApplicationContext().getBean(String beanName)
实现这一点,但它引入了spring依赖项,这不是理想的解决方案


也许有一些spring特性允许我们这样做?您不能对此提出任何建议吗?

因为您是手工创建对象的,所以无法在匿名类中直接注入bean。可能的解决方案是为ON_BALANCE_CHANGE_执行器创建静态内部类,并在配置中定义这种类型的bean

public abstract class EventExecutor {
public static class OnBalanceChangeExecutor extends EventExecutor {

        private BalanceDao balanceDao;

        @Override
        public void executeEvent() {
            BigDecimal balance;
            //getting the balance
            balanceDao.add(balance);
        }

        //GET, SET, others
    }}
之后,可以在上下文配置中创建bean:

<bean id="onBalanceChangeExecutor" class = "your.package.EventExecutor$OnBalanceChangeExecutor">
<property name="balanceDao" ref="balanceDao"/>
</bean>

您的解决方案看起来不错,但我找到了一个更适合我需要的解决方案。我使用MethodInvokationFactoryBean。