shiro配置报错,好心人给看看吧

kingsavage 2014-08-12 10:20:16
第一个错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityManager' defined in class path resource [spring-config-shiro.xml]: Cannot resolve reference to bean 'userRealm' while setting bean property 'realm'
报错的位置:
<!-- 安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="userRealm" />
<property name="sessionManager" ref="sessionManager" />
<property name="cacheManager" ref="cacheManager" />
<property name="rememberManager" ref="rememberManager" />
</bean>
<!-- Realm的实现 -->
<bean id="userRealm" class="com.core.realm.UserRealm">
<property name="credentialsMatcher" ref="credentialsMatcher" />
<property name="cachingEnabled" value="false" />
</bean>

userRealm的名字,包路径肯定没错

然后再往下看,第二个错误:
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRealm': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.core.service.UserService com.core.realm.UserRealm.userService
public class UserRealm extends AuthorizingRealm {

@Autowired
private UserService userService;
...}

也有引用啊。
再往下看,第三个错误:
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.core.dao.UserDao com.core.serviceImpl.UserSercieImpl.userDao
@Service("userService")
public class UserSercieImpl implements UserService{

@Autowired
private UserDao userDao;
...}

如果我把当前的shiro.xml注释掉,程序是能正常启动的,但到这个securityManager->userRealm->userService->userDao就提示我这些错误,什么原因呢?

谁能好心帮我看看,谢谢
...全文
4159 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingsavage 2014-08-12
  • 打赏
  • 举报
回复
我的Dao实现用的是spring data,所以就写了个接口继承了它的CrudRepository,这样就不用去写Dao的实现了,所以能不能帮我看看,现在的情况下是怎么回事?多谢了
  • 打赏
  • 举报
回复
引用 2 楼 kingsavage 的回复:
1.我的UserServiceImpl
@Service("userService")
public class UserSercieImpl implements UserService{

	@Autowired
	private UserDao userDao;
...}
2.我的UserDao是接口
@Repository("userDao")
public interface UserDao extends CrudRepository<User, Integer>{
	User findByUsername(String username);
}
3.UserDao上边确实有Repository。。。 救救我吧,多谢
亲,你把你的UserDao 改成接口形式的, 如: 将UserDao提一个接口,叫IUserDao 然后用UserDao 去 实现 IUserDao。 然后再用@Autowired
  • 打赏
  • 举报
回复
Spring的注入基于接口实现,基于接口的方式一是可以使得各个组件松耦合,而且也可以轻松的替代某一组件。 所以应该讲组件引用改为接口方式。
kingsavage 2014-08-12
  • 打赏
  • 举报
回复
1.我的UserServiceImpl
@Service("userService")
public class UserSercieImpl implements UserService{

	@Autowired
	private UserDao userDao;
...}
2.我的UserDao是接口
@Repository("userDao")
public interface UserDao extends CrudRepository<User, Integer>{
	User findByUsername(String username);
}
3.UserDao上边确实有Repository。。。 救救我吧,多谢
  • 打赏
  • 举报
回复
三种情况:不能自动注入 1、你的UserSercieImpl必须以@Service或@Component注解才行。 2、自动写入的时候把接口写成实现类了 如:你的UserDao是实现类么? 3、在UserDao 类上加上@Repository注解
  • 打赏
  • 举报
回复
引用 6 楼 kingsavage 的回复:
找到原因了:
<bean id="userRealm" class="com.core.realm.UserRealm" depends-on="userDao,roleDao,resourceDao">
		<property name="userService" ref="userService"/>
		<property name="credentialsMatcher" ref="credentialsMatcher" />
		<property name="cachingEnabled" value="false" />
	</bean>
在自定义realm中,一定要用depends-on加入所有的userService依赖dao
我去,还有这样的...这个我倒是没见过
kingsavage 2014-08-12
  • 打赏
  • 举报
回复
找到原因了:
<bean id="userRealm" class="com.core.realm.UserRealm" depends-on="userDao,roleDao,resourceDao">
		<property name="userService" ref="userService"/>
		<property name="credentialsMatcher" ref="credentialsMatcher" />
		<property name="cachingEnabled" value="false" />
	</bean>
在自定义realm中,一定要用depends-on加入所有的userService依赖dao

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧