在实现类中注入存储库而不使用xml在spring数据中使用@autowired
发布时间:2020-12-16 23:31:13 所属栏目:百科 来源:网络整理
导读:我是 spring-data的新手,我想尝试使用spring数据而不使用@autowired over repositories.我只想通过xml直接注入存储库,因为我无法从xml中获取我的实现类中的存储库实例,使用基于xml的配置的原因是我以前的服务层和控制器不支持任何注释功能所以我必须使用spri
我是
spring-data的新手,我想尝试使用spring数据而不使用@autowired over repositories.我只想通过xml直接注入存储库,因为我无法从xml中获取我的实现类中的存储库实例,使用基于xml的配置的原因是我以前的服务层和控制器不支持任何注释功能所以我必须使用spring数据操作dao层这是我的xml配置
<?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:jdbc="http://www.springframework.org/schema/jdbc" xmlns:context="http://www.springframework.org/schema/context" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:component-scan base-package="com.nousinfo.tutorial" /> <!-- Database --> <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://192.168.25.30:3306/employee" /> <property name="username" value="***" /> <property name="password" value="*****" /> </bean> <!-- Entity Manager --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="datasource" /> <property name="persistenceUnitName" value="EmployeeApp" /> </bean> <!-- Transaction Manager --> <beanid="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <!--- here i having problem on injecting the bean of employeeRepositories----> <bean id="employeeDaoImpl" class="com.nousinfo.tutorial.repository.impl.EmployeeDAOImpl"> <property name="employeeRepository" ref="employeeRepository" /> </bean> <bean id="employeeRepositories" class="com.nousinfo.tutorial.dao.EmployeeRepositories"/> <!-- Jpa Repositories --> <jpa:repositories base-package="com.nousinfo.tutorial.dao"></jpa:repositories> </beans> 这是我的persistence.xml <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="EmployeeApp" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>com.nousinfo.tutorial.model.Department</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> </properties> </persistence-unit> 这是我的员工存储库 public interface EmployeeRepositories extends JpaRepository<Employee,Long> { public List<Employee> findByFirstName(String name); @Query("FROM Employee emp WHERE emp.firstName = :firstname or emp.lastName = :lastname") List<Employee> getEmployeesByName(@Param("lastname") String lastname,@Param("firstname") String firstname); List<Employee> findByLastNameOrderByFirstNameAsc(String lastname); List<Employee> findByLastNameOrderByFirstNameDesc(String lastname); List<Employee> findByDepartmentId(String departmentId); } 这是我的实施 public class EmployeeDAOImpl { EmployeeRepositories employeeRepositories ; public void setEmployeeRepositories (EmployeeRepositories employeeRepositories ) { this.employeeRepositories = employeeRepositories ; } public List<Employee> getAllEmployees() { return employeeRepositories.findAll(); } 这种方式我称之为测试方法 ApplicationContext applicationContext=new ClassPathXmlApplicationContext("MyBean.xml"); EmployeeDAOImpl daOImpl=(EmployeeDAOImpl)applicationContext.getBean("employeeDaoImpl"); daOImpl.getAllEmployees(); 由于错误的映射会出现异常,所以请提供正确的映射,我将感谢你 这是我的例外 Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeDaoImpl' defined in class path resource [mybeans.xml]: Cannot resolve reference to bean 'employeeRepositories' while setting bean property 'employeeRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeRepositories' defined in class path resource [mybeans.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.nousinfo.tutorial.dao.EmployeeRepository]: Specified class is an interface at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1317) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1076) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:574) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) at com.nousinfo.tutorial.common.basemodel.MainTest.main(MainTest.java:13) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeRepositories' defined in class path resource [mybeans.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.nousinfo.tutorial.dao.EmployeeRepository]: Specified class is an interface at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:955) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:901) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) ... 15 more Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.nousinfo.tutorial.dao.EmployeeRepository]: Specified class is an interface at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:52) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:948) ... 23 more 解决方法
去掉
<bean id="employeeRepositories" class="com.nousinfo.tutorial.repository.EmployeeRepositories"/> 并使用: <bean id="employeeDaoImpl" class="com.nousinfo.tutorial.repository.impl.EmployeeDAOImpl"> <property name="employeeDAO" ref="employeeRepositories " /> </bean> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Flash Builder 4.6 无法生成 html 文件的解决方法
- 如果未指定,XML Schema dateTime的默认时区是什么时候?
- ruby-on-rails – 扩展Devise的SessionsController
- 相对路径和绝对路径
- 用到一个vb5的控件不能注册Big2GB.ocx,最后注册成功了。
- Oracle 11g expdp中query参数的使用
- 【XML的验证模式】
- c – POSIX C线程. pthread_cond_t例子.不能按预期工作
- tensor shape can be flexible to determined in Tensorflo
- c – 无法在动态链接库中找到过程入口点 – 查找错误的DLL