我们有一个基于弹簧的应用程序,它有两个级别的可运行程序: 父节点(调度程序)和子节点(加载程序),其中在ThreadPoolExecutor中运行的每个父节点都有一组子节点(同样在ThreadPoolExecutors中),它们需要一组父特定值(它们当前通过调用parent.getSomeProperty()获得)
我的问题是:我如何自动装配单亲及其子女使用的豆子?或者有没有办法让那些孩子意识到他们的“会话”/“上下文”有点说(这可以是通过散列“某事”获得的简单ID?
示例用例:
我正在将调度程序“parent”传递给它的所有子节点,这使得使用AppContext.getBean(...)静音,然后设置公共值/传递父节点。
答案 0 :(得分:0)
由于我没有得到任何答案,我将发布我自己的实现,到目前为止:
我实现了一个SharedStore静态对象,它主要有两个方法:
void putShared(Object o, String objectKey)
<T> T getShared(String objectKey, int parentCode, Class<T> type)
父线程调用put,而子节点调用gets:
//Parent:
SomeClass someObject;
putShared(someObject, "someObjectKey");
这使用Thread.CurrentThread()。hashCode()将对象放入并发哈希映射
孩子在构造函数中有一个键集:
//Child constructor in BaseRunnable abstract class
private int parentKey = Thread.currentThread().hashCode();
并使用:
调用getMethod//Child
getShared("someKey", parentKey, SomeClass.class);
并根据需要使用它(由孩子中的ThreadPoolExecutor中的多个孩子同时完成
所有Runnable bean都是带有惰性init的自动化原型,并扩展了基本抽象类,它实现了默认构造函数并设置了parentKey,其余的东西如DAO和3rdParty api obejects都是正常自动装配的。
批评赞赏!