Java Spring+GWT未满足的费用异常
我查看了几乎所有关于org.springframework.beans.factory.UnsatisfiedDependencyException的主题,但我找不到解决问题的方法。我的服务如下所示:Java Spring+GWT未满足的费用异常,java,spring,hibernate,gwt,Java,Spring,Hibernate,Gwt,我查看了几乎所有关于org.springframework.beans.factory.UnsatisfiedDependencyException的主题,但我找不到解决问题的方法。我的服务如下所示: @Service public class PacientService { @Resource private PacientDAO dao; @Resource private PacientModelTransformer transformer;
@Service
public class PacientService {
@Resource
private PacientDAO dao;
@Resource
private PacientModelTransformer transformer;
public PacientService() {
}
@Autowired
public PacientService(PacientDAO dao, PacientModelTransformer transformer) {
this.dao = dao;
this.transformer = transformer;
}
public PacientDTO getPacientById(Long pacientId) {
return transformer.toDTO(dao.readByPrimaryKey(pacientId));
}
}
<context:annotation-config />
<context:component-scan base-package="pl.arprojects.dietetyk" />
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/d2" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="database" value="MYSQL" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<hades:dao-config base-package="pl.arprojects.dietetyk.api.domian" />
@Repository
public interface PacientDAO extends GenericDao<Pacient, Long> {
@Query("Select * from dietetyk_pacients where name = :name")
public Pacient getByName(@Param("name") String name);
@Query("")
public void deleteByPrimaryKey(@Param("id") long id);
}
这是我的applicationContext.xml。我真的不知道为什么会有这样的例外:
@Service
public class PacientService {
@Resource
private PacientDAO dao;
@Resource
private PacientModelTransformer transformer;
public PacientService() {
}
@Autowired
public PacientService(PacientDAO dao, PacientModelTransformer transformer) {
this.dao = dao;
this.transformer = transformer;
}
public PacientDTO getPacientById(Long pacientId) {
return transformer.toDTO(dao.readByPrimaryKey(pacientId));
}
}
<context:annotation-config />
<context:component-scan base-package="pl.arprojects.dietetyk" />
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/d2" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="database" value="MYSQL" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<hades:dao-config base-package="pl.arprojects.dietetyk.api.domian" />
@Repository
public interface PacientDAO extends GenericDao<Pacient, Long> {
@Query("Select * from dietetyk_pacients where name = :name")
public Pacient getByName(@Param("name") String name);
@Query("")
public void deleteByPrimaryKey(@Param("id") long id);
}
org.springframework.beans.factory.UnsatifiedDependencyException:创建名为“pacientService”的bean时出错,该名称在文件[D:\Dietyk\Dietyk\target\Dietyk-1.0.0-SNAPSHOT\WEB-INF\classes\pl\arprojects\Dietyk\server\service\pacientService.class]中定义:未满足的依赖项通过索引为0的构造函数参数表示[pl.arprojects.DIETEYK.api.dao.PacientDAO]::未找到依赖项类型为[pl.arprojects.DIETEYK.api.dao.PacientDAO]的匹配bean:应至少有1个bean符合此依赖项的autowire候选项的条件。依赖项批注:{};嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到依赖项类型为[pl.arprojects.dietyk.api.dao.PacientDAO]的匹配bean:至少需要1个符合此依赖项autowire候选项条件的bean。依赖项批注:{}
不,这个DAO没有任何子类,看起来就像这样:
@Service
public class PacientService {
@Resource
private PacientDAO dao;
@Resource
private PacientModelTransformer transformer;
public PacientService() {
}
@Autowired
public PacientService(PacientDAO dao, PacientModelTransformer transformer) {
this.dao = dao;
this.transformer = transformer;
}
public PacientDTO getPacientById(Long pacientId) {
return transformer.toDTO(dao.readByPrimaryKey(pacientId));
}
}
<context:annotation-config />
<context:component-scan base-package="pl.arprojects.dietetyk" />
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/d2" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="database" value="MYSQL" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<hades:dao-config base-package="pl.arprojects.dietetyk.api.domian" />
@Repository
public interface PacientDAO extends GenericDao<Pacient, Long> {
@Query("Select * from dietetyk_pacients where name = :name")
public Pacient getByName(@Param("name") String name);
@Query("")
public void deleteByPrimaryKey(@Param("id") long id);
}
从Hades Synyx扩展GenericDao
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:hades="http://schemas.synyx.org/hades"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://schemas.synyx.org/hades http://schemas.synyx.org/hades/hades.xsd">
<context:annotation-config />
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="database" value="MYSQL" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/d2" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<hades:dao-config base-package="pl.arprojects.dietetyk.api.domian" />
applicationContext.xml对所有DAO类(包括基本DAO的子类)尝试@Repository或@Component注释,而无需在注释中定义名称
依赖项是按类型解析的。从异常中可以清楚看出,PacientDAO没有在spring上下文中加载。正如异常所说:没有匹配的bean类型[pl.arprojects.dietyk.api.dao.PacientDAO]为依赖项找到:应至少有1个bean符合此依赖项的autowire候选项的条件……我认为或会这样做。如果我错了,我应该如何将DAO加载到上下文中?尝试一下您是否使用了@Autowired for DAOs?没有。我的DAO看起来是这样的:@RepositoryPacifientDAO公共接口PacifientDAO扩展了GenericDao{@QuerySelect*来自Dietyk_pacients,其中name=:name public PacientgetByName@Paramname字符串名称,@Paramtable String table;@Query public voiddeleteByPrimaryKey@Paramidlong pacientId;}我已经尝试在DAO类上使用@Repository或@Component注释。仍然没有得到满意的DependencyException这个pacientDAO接口有任何子类并且它有注释吗?请共享一个示例代码。然后很明显没有pacientDAO类型的类。这意味着exception是可以的。创建子类以便spring可以加载它们o上下文,可以作为服务类的依赖项传递。据我所知,Hades Synyx不要求我们创建类型的类—在本例中为—PacientDAO,我们只使用此接口。我错了吗?对不起,我对Hades语法一无所知。我只知道Spring如何解析其依赖项。在服务类中使用GenericDaoFactorys在删除自动连线批注后手动解析依赖项,或使用GenericDaoSupport类代替接口。抱歉,我帮不上忙,请阅读Java文档。谢谢