2011-06-22 4 views
0

autowiringがなぜ機能しないのかわかりません。@Repositoryの作り方は?

ApplicationContext ctx = new ClassPathXmlApplicationContext(
         DEFAULT_APP_CONTEXT); 

そして.xmlファイルは先頭にのために必要なものを持っている:私は春3を使用していますので、私はこのようなアプリケーション・コンテキストを作成するために設定したアプリケーションのmainメソッドで非Webアプリケーションをしました仕事にオートワイヤリングする:

<context:annotation-config /> 
<context:component-scan base-package="star,hw" /> 

しかし、動作しません。私はhwパッケージの下にクラスレベル@Repositoryアノテーションでサービスクラスをしましたが、@Autowireにしようとしたとき、それは私が手:私は、ログファイルに気づい

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'inventoryDAO' is defined 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:527) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1083) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:274) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) 
    ... 77 more 

一つ奇妙なこと:

Pre-instantiating singletons in org.s[email protected]4440ece0: defining beans [*skipping*, inventoryDAOImpl, *skipping*] 

私は@Repositoryを使ったクラスですが、それはInventoryDAOを実装しています。それはそこに示すことが間違っていないinventoryDAOImpl?何が間違っているか把握するにはどうすればよいですか?

編集:はい、おそらく問題は@Autowireではなく、@Repositoryで正しく作成していない可能性があります。

答えて

1

お試し@Repository("inventoryDAO")

+0

これは、トリックでした!どうして? :o私は '@ Repository'を何も書かなくても使っているウェブアプリケーションを持っています。 – Rihards

+0

任意のフォームでautowiring-by-nameを使用している場合、Bean名のデフォルトはクラス名(最初の文字はダウンケース)です。あなたのケースのbean名はinventoryDaoImplでした。 autowiring-by-typeでは、DAOがアプリケーションコンテキスト(通常はDAOの場合)で唯一のものである限り、名前を指定する必要はありません。 –

+0

デフォルトで@Autowireはタイプではありませんでしたか?どのようにautowire-by-type? DAOをオートワイヤリングするために、純粋な '@ Autowire'をサービスクラスのフィールドに追加しました。 – Rihards