请注意:,虽然我手头的具体问题涉及Grails Shiro插件,但我认为这是一个核心的Grails问题。因此,任何厌倦战斗的Grails老兵都应该能够回答这个问题,不管他们在Grails的经历如何。
使用Grails插件(通过grails shiro-quick-start)在grails-app/realms.下生成一个Shiro领域类例如,运行:
grails shiro-quick-start --prefix=com.example.me.myapp.Mongo...will生产:
myapp/
grails-app/
realms/
com/
me/
myapp/
MongoDbRealm.groovy其中MongoDbRealm是Shiro领域。
package com.example.me.myapp
class MongoDbRealm {
FizzClient fizzClient // How to inject?
BuzzClient buzzClient // How to inject?
FooFactory fooFactory // How to inject?
// lots of auth-centric, generated code here...
}让我们假设MongoDbRealm非常复杂,需要注入许多复杂的对象,如服务客户端和工厂等。如何正确地注入?
@PostConstruct在这里工作吗?我能像对控制器那样将Grails服务注入其中吗?还有别的吗?
同样,我可以想象这里的依赖注入与在MongoDbRealm下定义的任何其他类一样工作(对于Grails和我的grails-app )。我只是不明白grails-app/*依赖注入是如何工作的。
发布于 2015-10-23 13:12:14
支持在grails-app下定义类的插件通常通过定义一种新类型的工件来实现,并指定一个ArtefactHandler实现来管理它。Grails ArtefactHandlerAdapter类实现了这个接口,并提供了许多公共功能,因此经常使用它,并在插件的RealmArtefactHandler类中使用。
依赖项注入将在newInstance方法中配置。你可以看到我在哪里为我的插件这里这么做。由于Shiro插件不覆盖基类中的该方法,因此似乎不支持依赖项注入。
请注意,如果领域类注册为Spring,则使用@PostConstruct (或实现InitializingBean)可以工作,但在这个插件中,情况并非如此。
我试图避免使用Holders类,因为在大多数情况下,使用DI而不是显式地提取依赖项是很简单的,但是这里似乎需要使用这种方法,例如fizzClient = Holders.applicationContext.fizzClient (假设注册为"fizzClient“bean)。
https://stackoverflow.com/questions/33302416
复制相似问题