更新:重复。见How to separate interface from implementation in Grails services?
我想通过它与Spring的接口配置一个bean - 我希望在依赖注入框架中可以实现。
以下是一个例子:
public interface MyInterface {
public void callMe();
}
public class MyImpl implements MyInterface {
public void callMe() {
println("Calling MyImpl");
}
}
我应该如何以可以切换实现的方式配置此bean,例如,取决于我是否在开发/生产环境中?在Grails中,我希望用以下内容填充我的grails-app / config / spring / resources.groovy:
beans = {
myBean(MyInterface) {
implemented by MyImpl //sintax not supported
}
}
所以我可以在我的代码中定义和使用这个bean,如:
def myBean
(...)
myBean.callMe()
我知道有一些Spring属性,比如factory-method和factory-bean来实现这一点,但我想知道是否有一个简单直接的界面,就像在没有样板代码的情况下在Spring / Grails中定义bean一样实例化它们。
答案 0 :(得分:0)
bean类型必须是非抽象类。
beans = {
myBean(MyImpl) {
// ...
}
}
如果需要,您仍然可以根据接口类型执行DI,但bean定义需要具体类型。
答案 1 :(得分:0)
这可能与关于grails环境的知识有关,而不是spring bean。
要调用特定于环境的bean配置,您可以执行以下操作:
Environment.current 提供当前环境,因此
beans = {
myBean(MyInterface) {
if(Environment.current == Environment.DEVELOPMENT){
implemented by MyImpl
}else{
implemented by ProdImpl
}
}
}
希望它有所帮助。