Wal*_*ter 1 spring spring-boot
我有一个在Spring之外创建的类的实例,我希望能够访问Spring bean,以便它可以触发一个事件并被Spring bean观察到.我没有使用Spring Web,我的应用程序是通过spring boot从命令行运行的.
您唯一的选择是使用静态方法公开应用程序的Spring上下文,以便不由Spring管理的对象可以使用它来获取所需的托管bean的引用.
从上下文的包装器开始.创建一个常规托管bean,它需要在其构造函数中引用上下文.引用分配给静态类字段,该字段还具有静态getter:
@Service
class ContextWrapper {
private static ApplicationContext context;
@Autowired
public ContextWrapper(ApplicationContext ac) {
context = ac;
}
public static ApplicationContext getContext() {
return context;
}
}
Run Code Online (Sandbox Code Playgroud)使用静态getter访问不受Spring管理的对象中的上下文,并使用上下文中可用的方法引用bean:
SomeBean bean = ContextWrapper.getContext().getBean("someBean", SomeBean.class);
// do something with the bean
Run Code Online (Sandbox Code Playgroud)您需要的最后一件事是从Spring bean到非托管对象的通信通道.例如,SomeBean可以公开一个setter,它将接受非托管对象作为参数,并将引用存储在字段中以供将来使用.对象mast使用上面提到的静态上下文访问器获取对托管bean的引用,并使用setter使bean知道它的存在.
@Service
class SomeBean {
// ... your bean stuff
private SomeClass someclass;
public void setSomeClass(Someclass someclass) {
this.someclass = someclass;
}
private void sendEventToSomeClass() {
// communicate with the object not managed by Spring
if (someClass == null) return;
someClass.sendEvent();
}
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
6409 次 |
| 最近记录: |