【发布时间】:2014-07-16 00:13:20
【问题描述】:
我正在尝试过去 4 天 Google 提供的所有解决方案。但不工作。
我正在尝试在接口下方自动装配 -
@Qualifier("roleAccessRepository")
@Repository
public interface RoleAccessRepository extends BaseJPACrudRepository<RoleAccess, Long> {
以下列方式在 PermissionEvaluator 中。但它不起作用。
@Scope(proxyMode = ScopedProxyMode.INTERFACES, value = "prototype")
public class PermissionEvaluator implements org.springframework.security.access.PermissionEvaluator
{
@Autowired
RoleAccessRepository roleAccessRepository;
.......
给我错误 -
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: net.pa
ger.lrs.sql.db.RoleAccessRepository net.pager.lrs.security.PermissionEvaluator.roleAccessRepository;
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying
bean of type [net.pager.lrs.sql.db.RoleAccessRepository] found for dependency: expected at least 1 b
ean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springf
但是在同一个包中定义并在服务类中自动装配的存储库运行良好。
@Service
@Transactional
public class AccountService extends BaseCrudService<Account> {
/** The account db. */
@Autowired
private AccountRepository accountDB;
}
我的 security.xml 如下 - 它具有作为父目录的基本包 net.pager.lrs。
<bean id="permissionEvaluator" class="net.pager.lrs.security.PermissionEvaluator">
<constructor-arg index="0">
请帮帮我。
【问题讨论】:
-
您的
PermissionEvaluator是一个@Component并在 XML 中定义,由于组件扫描,您有多个PermissionEvaluator实例。删除@Component以使其不被检测到。另外,为什么所有原型都在范围内?单身应该没问题。 -
非常感谢您的即时回复。实际上,对于 PermissionEvaluator,我将其添加为解决方法。和原型也是。将尝试删除它。
-
我尝试删除 PermissionEvaluator 的 @Component 并删除 Prototype 范围。但是在我执行 @Autowired(required = true) RoleAccessRepository roleAccessRepository; 时仍然出现同样的错误
-
我觉得你可能对上下文层次有问题。您的组件扫描在哪里定义,您的
<bean id="permissionEvaluator">在哪里定义? (顺便说一句。required = true默认为@Autowired)。另外,如果您可以格式化该堆栈跟踪,那也可以。 -
帮助我理解这一点。我看到错误说没有合格的 bean。你有接口 RoleAccessRepository 的实现吗?
标签: spring spring-mvc spring-security annotations autowired