2

Spring ベースの Web プロジェクト用に次のコードがあります。

コントローラ:

@Controller
@RequestMapping("mycontroller")
public class MyObjectController {

    @Autowired
    private MyService service;
// Code omitted
}

サービス:

@Service
public class MyServiceImpl implements MyService {

    @Autowired
    @Qualifier("mydao")
    private MyDao mydao;

    @Autowired
    @Qualifier("mydao2")
    private MyDao2 mydao2;

// Code omitted
}

Context.xml (春):

<annotation-driven />
<context:annotation-config /> 

<context:component-scan base-package="com.mycompany" />

<beans:bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />    

<beans:bean id="myService" class="com.mycompany.serviceimpl.MyServiceImpl" /> 

ただし、次のエラーがスローされます。

NoSuchBeanDefinitionException: タイプ [com.mycompany.service.MyService] の一意の Bean が定義されていません: 単一の一致する Bean が予想されますが、2 が見つかりました: [myService, myServiceImpl]

4

2 に答える 2

4

あなたのビーン、ここで2回定義されています(@Service注釈、myServiceImplビーンの登録になります):

@Service
public class MyServiceImpl implements MyService {

そしてここ(IDContext.xml付きのBean ):myService

<beans:bean id="myService" class="com.mycompany.serviceimpl.MyServiceImpl" /> 

XML から定義を削除するか、注釈を削除してください。

于 2012-05-19T17:11:05.043 に答える
1

を装着する、で Bean を宣言します。両方を行わないでください。そうしないと、豆が 2 つになってしまいます。 @ServiceMyServiceImplContext.xml

myServiceXML ファイルから Bean 定義を削除すると、準備完了です。

DefaultAnnotationHandlerMappingまた、AnnotationMethodHandlerAdapterBeanを宣言する必要はありません。これらはデフォルトで利用可能です。

于 2012-05-19T17:10:30.740 に答える