将属性注入静态最终字段

时间:2015-11-25 08:11:59

标签: java spring

我有以下类来处理事件:

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();
}

事情是处理一些事件意味着将一些数据保存到持久性存储中。由于我使用Spring 4,我需要执行相应的依赖注入才能执行db - 操作。

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

所以,有可能通过ContextLoader.getCurrentWebApplicationContext().getBean(String beanName)来做到这一点,但它引入了弹簧依赖性,这不是一个理想的解决方案。

也许有一些弹簧功能允许我们这样做?你不能就此提出任何建议吗?

1 个答案:

答案 0 :(得分:2)

由于您手动创建对象,因此无法直接在匿名类中注入bean。可能的解决方案是为ON_BALANCE_CHANGE_EXECUTOR创建静态内部类,并在配置中定义此类型的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>