2013-06-30 12 views
6

こんにちは私は、休止状態と春を使用して簡単なWebアプリケーションを作成しました。エラー:[java.lang.Class]型のインデックス0を持つコンストラクタ引数で表現されている満足していない依存関係

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clientService' defined in class path resource [applicationContext.xml]: 
Cannot resolve reference to bean 'clientDao' while setting bean property 'clientDao'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: 
Error creating bean with name 'clientDao' defined in class path resource [applicationContext.xml]: 
Unsatisfied dependency expressed through constructor argument with index 0 of type [java.lang.Class]: 

GenericDao

public interface GenericDao<T, ID extends Serializable> { 

    T save(T entity); 
    T update(T entity); 
    void delete(T entity); 
    T findById(ID id); 
    List<T> findAll(); 
    void flush(); 

}

GenericDaoImpl

@Transactional 
public class GenericDaoImpl<T, ID extends Serializable> implements GenericDao<T, ID> { 

    @Autowired 
    SessionFactory sessionFactory ; 

private Class<T> persistentClass; 



    public GenericDaoImpl() { 
    super(); 
} 

    public GenericDaoImpl(Class<T> persistentClass) { 
    super(); 
    this.persistentClass = persistentClass; 
} 

    @Transactional 
    public T save(T entity) { 
     this.sessionFactory.getCurrentSession().save(entity); 
     return null; 
    } 

    @Transactional 
    public T update(T entity) { 
     this.sessionFactory.getCurrentSession().update(entity); 
     return null; 
    } 

    @Transactional 
    public void delete(T entity) { 
     this.sessionFactory.getCurrentSession().delete(entity); 

    } 

    @SuppressWarnings("unchecked") 
    @Transactional 
    public T findById(ID id) { 
     return (T) this.sessionFactory.getCurrentSession().load(this.getPersistentClass(), id); 

    } 
    @SuppressWarnings("unchecked") 
    @Transactional 
    public List<T> findAll() { 
     return this.sessionFactory.getCurrentSession().createQuery("* from"+this.getPersistentClass().getSimpleName()).list(); 
    } 

    @Transactional 
    public void flush() { 
     this.sessionFactory.getCurrentSession().flush(); 

    } 

    public SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 

    public void setSessionFactory(SessionFactory sessionFactory) { 
     this.sessionFactory = sessionFactory; 
    } 

    public Class<T> getPersistentClass() { 
     return persistentClass; 
    } 

    public void setPersistentClass(Class<T> persistentClass) { 
     this.persistentClass = persistentClass; 
    } 



} 

ClientDao

public interface ClientDao extends GenericDao<Client,Integer> { 



} 

ClientDaoImpl

@Transactional 
@Repository("clientDao") 
public class ClientDaoImpl extends GenericDaoImpl<Client,Integer> implements ClientDao { 






    public ClientDaoImpl(Class<Client> persistentClass) { 
     super(persistentClass); 

    } 

アプリケーションのcontext.xml

<bean id="client" class="com.webapp.model.Client"/> 

    <bean id="genericDao" class="com.webapp.dao.GenericDaoImpl"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 
    <bean id="clientDao" class="com.webapp.dao.ClientDaoImpl" parent="genericDao"> 
    <constructor-arg ref="client" /> 
    </bean> 

<bean id="clientService" class="com.webapp.service.ClientServiceImpl"> 
     <property name="clientDao" ref="clientDao" /> 
    </bean> 

答えて

6

用途:

<bean id="clientDao" class="com.webapp.dao.ClientDaoImpl" parent="genericDao"> 
<constructor-arg >com.xxx.Client</constructor-arg > 

春に文字列を "キャスト" しますクラス。次に、XMLからクライアントBeanを削除できます。

それとも(それが唯一のこのタイプにすることができ、それパラメータにする理由はない)役に立たないので、あなたのClientDaoImplからこのパラメータを削除

public ClientDaoImpl() { 
    super(com.xxx.Client.class); 
} 
+0

ありがとうございます、それは動作します –

2

ClientDaoImplクラスで定義されたコンストラクタはタイプClass<Client>のパラメータを期待。しかし、applicationContext.xmlでは、コンストラクタに渡すインスタンスクライアントオブジェクトを設定します。

変更コンストラクタオブジェクトを受け取り、スーパーにクラスを渡すために、例:

public ClientDaoImpl(Client client) { 
     super(client.getClass()); 

    } 
+0

ありがとうございます! –

3

WEB-INF/XXX- [org.springframework.security.web.context.SecurityContextRepository]のインデックス0を持つコンストラクタ引数で表現されている満足度の低い依存関係:あいまいなコンストラクタの引数型 - 正しいBean参照をコンストラクタ引数として指定しましたか?

解決策は、コンストラクタ引数からnameプロパティを削除することです(存在する場合)。参照のみを保持します。 それは動作します。

関連する問題