Spring没有类型匹配的bean,预计至少有1个bean

时间:2012-12-11 08:47:12

标签: java spring spring-mvc autowired

获取错误

 No matching bean of type [foo.bar.service.AccountService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

我的服务:

public interface AccountService {

@Service
public class AccountServiceImpl implements AccountService {

所以我应该实施

我想要的地方:

public class CustomAuthentication implements AuthenticationProvider {

@Autowired
private AccountService accountService;

在我的另一个班级也做同样的事情,但它有效。

@Controller
public class AccountController {

@Autowired
private AccountService accountService;

当我从CustomAuthentication删除这两行时,没有错误。

配置只是因为:

    <context:component-scan base-package="foo.bar" />

3 个答案:

答案 0 :(得分:7)

只有Spring托管对象才能自动装配另一个组件/服务/存储库。

public class CustomAuthentication implements AuthenticationProvider需要进行春季管理

喜欢

@Controller
public class AccountController

尝试使用@Component

注释CustomAuthenitcation
@Component
public class CustomAuthentication implements AuthenticationProvider

让我知道如何创建CustomAuthentication对象。 CustomAuthentication对象应该是通过请求Spring(ApplicationContext.getBean()或在另一个bean中自动装配)获得的代理。

更新:

此错误的原因是您有两个配置文件。 spring-servlet.xml和spring-security.xml。 spring-security.xml中定义的bean无法在其他bean中找到它们。

所以你应该在<import resource="spring-servlet.xml"/>中尝试类似spring-security.xml的内容。

答案 1 :(得分:0)

请尝试<context:component-scan base-package="foo.bar.*" /><context:component-scan base-package="foo.bar.service" />。我相信它会奏效。

答案 2 :(得分:0)

你必须在AccountServiceImpl类@Service(“accountService”)

上写