简体   繁体   English

将属性注入静态的final字段

[英]Injecting property into a static final field

I have the following class that takes processing events: 我有以下处理事件的类:

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

The thing is processing some events means to save some data into a persistent store. 事情是处理一些事件意味着将一些数据保存到持久性存储中。 Since I use Spring 4 I need to perform a corresponding dependency injection in order to perform db -operation. 由于我使用Spring 4,因此需要执行相应的依赖项注入才能执行db -operation。

Curretly, I intent to allow client to perform event handlings via invoking methods on static final fields in order to increase code readability. 坦率地说,我打算允许客户端通过对静态final字段调用方法来执行事件处理,以提高代码的可读性。

So, there is a possibility to do that via ContextLoader.getCurrentWebApplicationContext().getBean(String beanName) but it introduces spring dependencies which is not a desirable solution. 因此,可以通过ContextLoader.getCurrentWebApplicationContext().getBean(String beanName)但是它引入了spring依赖关系,这不是理想的解决方案。

Maybe there is some spring feature allowing us to do that? 也许有一些弹簧功能可以使我们做到这一点? Couldn't you suggest anything about that? 您不能提出任何建议吗?

Since you create object by hand you cannot inject beans directly in anonymous class. 由于您是手动创建对象的,因此无法直接在匿名类中注入bean。 The possible solution is to create static inner class for ON_BALANCE_CHANGE_EXECUTOR and define bean of this type in your config. 可能的解决方案是为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
    }}

After that you can create bean in your context config: 之后,您可以在上下文配置中创建bean:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM