如何在 Drool 中使用 Spring 托管 beans
How to use Spring managed beans in Drool
我有一个由 spring 管理的服务,我想在 drool 规则中使用或注入依赖项。如何在 Drool 规则中使用服务 bean?
@Service
public class SomeService {
public void doSomething() {}
}
dialect "mvel"
rule "something"
when
................
then
service.doSomething()
end
在调用它们时将 bean 实例传递到工作内存中,就像传递任何其他数据一样。这样您就可以自动装配或以其他方式利用依赖注入来获取 Spring 管理的单例bean,然后在您的规则中使用相同的 bean,而无需新建另一个实例。
@Component
class RuleExecutor {
private final SomeService service; // Bean set via constructor injection
public RuleExecutor(SomeService service) {
this.service = service;
}
public void fireRules( ... ) { // assuming other data passed in via parameter
KieSession kieSession = ...;
kieSession.insert( this.service); // insert bean into the working memory
kieSession.insert( ... ); // insert other data into working memory
kieSession.fireAllRules();
}
}
在这个例子中,我使用了构造函数注入来传入bean实例。我们可以假设 @Service
和这个 @Component
都被组件扫描拾取了。
然后您可以在规则中与它进行交互,就像您对任何其他数据进行交互一样:
dialect "mvel"
rule "something"
when
service: SomeService()
then
service.doSomething()
end
请记住,service: SomeService()
匹配工作内存中的 SomeService 实例,并将其分配给 service
变量以供在规则中使用。它不是新建一个新实例。
我有一个由 spring 管理的服务,我想在 drool 规则中使用或注入依赖项。如何在 Drool 规则中使用服务 bean?
@Service
public class SomeService {
public void doSomething() {}
}
dialect "mvel"
rule "something"
when
................
then
service.doSomething()
end
在调用它们时将 bean 实例传递到工作内存中,就像传递任何其他数据一样。这样您就可以自动装配或以其他方式利用依赖注入来获取 Spring 管理的单例bean,然后在您的规则中使用相同的 bean,而无需新建另一个实例。
@Component
class RuleExecutor {
private final SomeService service; // Bean set via constructor injection
public RuleExecutor(SomeService service) {
this.service = service;
}
public void fireRules( ... ) { // assuming other data passed in via parameter
KieSession kieSession = ...;
kieSession.insert( this.service); // insert bean into the working memory
kieSession.insert( ... ); // insert other data into working memory
kieSession.fireAllRules();
}
}
在这个例子中,我使用了构造函数注入来传入bean实例。我们可以假设 @Service
和这个 @Component
都被组件扫描拾取了。
然后您可以在规则中与它进行交互,就像您对任何其他数据进行交互一样:
dialect "mvel"
rule "something"
when
service: SomeService()
then
service.doSomething()
end
请记住,service: SomeService()
匹配工作内存中的 SomeService 实例,并将其分配给 service
变量以供在规则中使用。它不是新建一个新实例。