【问题标题】:org.springframework.beans.factory.UnsatisfiedDependencyException: Unsatisfied dependency expressed through method 'anyMethodName' parameter 0:org.springframework.beans.factory.UnsatisfiedDependencyException:通过方法'anyMethodName'参数0表示的不满足的依赖关系:
【发布时间】:2016-07-03 17:34:43
【问题描述】:

我不知道这个设置有什么问题...

声明:

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userDao': Unsatisfied dependency expressed through method 'anyMethodName' parameter 0: Error creating bean with name 'sessionFactory' defined in class path resource [hbn-config.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [hbn-config.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
juil. 03, 2016 6:56:50 PM org.springframework.cache.ehcache.EhCacheManagerFactoryBean destroy
INFOS: Shutting down EhCache CacheManager
juil. 03, 2016 6:56:50 PM org.springframework.web.context.ContextLoader initWebApplicationContext
GRAVE: Context initialization failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userDao': Unsatisfied dependency expressed through method 'anyMethodName' parameter 0: Error creating bean with name 'sessionFactory' defined in class path resource [hbn-config.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [hbn-config.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:651)

用户道:

@Repository
public class UserDao extends AbstractDao<User> {
private static Logger LOG = LoggerFactory.getLogger(UserDao.class);

public UserDao() {
}

public List<User> findAllUsers() {
    Query q = getHibernateTemplate()
            .getSessionFactory()
            .openSession()
            .createQuery("from " + entityClass.getSimpleName());

    List<User> list = q.list();

    return list;
}

抽象道:

public abstract class AbstractDao<E> extends CustomHibernateDaoSupport {

protected final Class<E> entityClass;

@SuppressWarnings("unchecked")
public AbstractDao() {
    entityClass = (Class<E>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}

protected HibernateTemplate getOneResultTemplate() {
    HibernateTemplate oneResultTemplate = createHibernateTemplate(getSessionFactory());
    oneResultTemplate.setMaxResults(1);
    return oneResultTemplate;
}

protected Query createQuery(String queryString) {
    return getSessionFactory().getCurrentSession().createQuery(queryString);
}

@Transactional(readOnly = false)
public void save(E entity) {
    getHibernateTemplate().save(entity);
}

@Transactional(readOnly = false)
public void saveOrUpdate(E entity) {
    getHibernateTemplate().saveOrUpdate(entity);
}

@Transactional(readOnly = false)
public void update(E entity) {
    getHibernateTemplate().update(entity);
}

@Transactional(readOnly = false)
public void delete(E entity) {
    getHibernateTemplate().delete(entity);
}

@SuppressWarnings("unchecked")
public List<E> list() {
    Query q = getHibernateTemplate().getSessionFactory().openSession()
            .createQuery("from " + entityClass.getSimpleName());
    return q.list();
}

CustomHibernateDaoSupport:

public abstract class CustomHibernateDaoSupport extends HibernateDaoSupport {
   @Autowired
   public void anyMethodName(SessionFactory sessionFactory) {
      setSessionFactory(sessionFactory);
   }
}

webapp上下文:

<?xml version="1.0" encoding="UTF-8"?>...

<cache:annotation-driven />

<context:property-placeholder location="classpath:app.properties" />

<!-- Auto scan the components -->
<context:annotation-config />
<context:component-scan base-package="com.example" />

<bean id="applicationContextHolder"
    class="com.example.myproject.core.util.ApplicationContextHolder" />

<import resource="classpath:hbn-config.xml" />
<import resource="classpath:cache-config.xml" />

hbn 配置:

<?xml version="1.0" encoding="UTF-8"?>...

    <!-- Hibernate session factory -->
    <tx:annotation-driven />

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <!-- Hibernate session factory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.max_fetch_depth">${hibernate.max_fetch_depth}</prop>
                <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>
                <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
                <prop key="hibernate.temp.use_jdbc_metadata_defaults">${hibernate.temp.use_jdbc_metadata_defaults}</prop>
                <prop key="hibernate.order_inserts">${hibernate.order_inserts}</prop>
                <prop key="hibernate.order_updates">${hibernate.order_updates}</prop>
            </props>
        </property>
        <property name="packagesToScan" value="com.example.myproject.core.model" />
    </bean>

    <bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>


    <aop:config>
        <aop:pointcut id="serviceMethods"
            expression="execution(*com.example.myproject.core.dao.*Dao.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
    </aop:config>

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" read-only="false" />
            <!-- <tx:method name="save*" propagation="REQUIRED" read-only="false" 
                /> -->
            <!-- <tx:method name="add*" propagation="REQUIRED" read-only="false" /> -->
            <!-- <tx:method name="update*" propagation="REQUIRED" read-only="false" 
                /> -->
            <!-- <tx:method name="delete*" propagation="REQUIRED" read-only="false" 
                /> -->
            <!-- <tx:method name="export*" propagation="REQUIRED" read-only="false" 
                /> -->
            <!-- <tx:method name="import*" propagation="REQUIRED" read-only="false" 
                /> -->
        </tx:attributes>
    </tx:advice>

</beans>

【问题讨论】:

  • 实际上,您可以从问题中删除所有代码,然后向我们展示您的 POM

标签: java spring hibernate maven spring-mvc


【解决方案1】:

类路径中的 jboss-logging 版本与 Hibernate 预期的不同。

【讨论】:

    猜你喜欢
    • 2017-09-24
    • 2021-10-30
    • 1970-01-01
    • 2023-02-08
    • 2019-06-10
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2019-08-14
    相关资源
    最近更新 更多