问题描述
ShiroConfig 中配置Realm,而Realm中调用了dubbo的服务。
ShiroConfig.java
@Autowired
private IShiroService shiroService
@Bean("shiroDbRealm")
public ShiroDbRealm shiroDbRealm() {
ShiroDbRealm shiroDbRealm = new ShiroDbRealm();
// 测试 shiroService 尚未注入
shiroDbRealm.setShiroService(shiroService);
return shiroDbRealm;
}
解决办法:
第一步:自定BeanFactoryAware
AwareBean.java
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
/**
* 自定BeanFactoryAware
*/
public class AwareBean implements BeanFactoryAware {
private BeanFactory factory;
// BeanFactoryAware setter (called by Spring during bean instantiation)
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.factory = beanFactory;
}
public BeanFactory getFactory() {
return factory;
}
public void close() {
// do clean-up
}
}
第二步:
ShiroConfig.java
@Bean("shiroDbRealm")
public ShiroDbRealm shiroDbRealm() {
ShiroDbRealm shiroDbRealm = new ShiroDbRealm();
// 通过BeanFactory 获取 shiroService
IShiroService shiroService = awareBean().getFactory().getBean("shiroService", IShiroService.class);
shiroDbRealm.setShiroService(shiroService);
return shiroDbRealm;
}