在上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:在com.niit.shoppingcart.config.ApplicationContextConfig中定义名称为“categoryDAO”的bean时出错:通过方法'getCategoryDao'参数表示的不满意依赖关系0:在com.niit.shoppingcart.config.ApplicationContextConfig中定义名称为'sessionFactory'的bean创建错误:通过工厂方法进行Bean实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.hibernate.SessionFactory]:工厂方法'getSessionFactory'抛出异常;嵌套异常是java.lang.NoSuchMethodError:javax.persistence.Table.indexes()[Ljavax / persistence / Index ;;嵌套异常是org.springframework.beans.factory.BeanCreationException:在com.niit.shoppingcart.config.ApplicationContextConfig中定义了名为'sessionFactory'的bean时出错:通过工厂方法进行Bean实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.hibernate.SessionFactory]:工厂方法'getSessionFactory'抛出异常;嵌套异常是java.lang.NoSuchMethodError:javax.persistence.Table.indexes()[Ljavax / persistence / Index;线程“main”中的异常org.springframework.beans.factory.UnsatisfiedDependencyException:在com.niit.shoppingcart.config.ApplicationContextConfig中定义名称为“categoryDAO”的bean时出错:通过方法'getCategoryDao'参数表示的不满意依赖0:创建bean时出错在com.niit.shoppingcart.config.ApplicationContextConfig中定义名称'sessionFactory':通过工厂方法进行Bean实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.hibernate.SessionFactory]:工厂方法'getSessionFactory'抛出异常;嵌套异常是java.lang.NoSuchMethodError:javax.persistence.Table.indexes()[Ljavax / persistence / Index ;;嵌套异常是org.springframework.beans.factory.BeanCreationException:在com.niit.shoppingcart.config.ApplicationContextConfig中定义了名为'sessionFactory'的bean时出错:通过工厂方法进行Bean实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.hibernate.SessionFactory]:工厂方法'getSessionFactory'抛出异常;嵌套异常是java.lang.NoSuchMethodError:javax.persistence.Table.indexes()[Ljavax / persistence / Index;在Org.springframework.beans.factory org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:467)org.springframework.beans.factory .support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory .java:510)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)at org .springframework.beans.factory.support.DefaultSingletonBeanRegistry.getS ingleton(DefaultSingletonBeanRegistry.java:230)org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)位于org.springframework.context.support.AbstractApplicationContext的org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)的org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776) .refit(AbstractApplicationContext.java:541)at com.niit.shoppingcart.CategoryTest.main(CategoryTest.java:13)引起:org.springframework.beans.factory.BeanCreationException:在com中定义名为'sessionFactory'的bean时出错.niit.shoppingcart.config.ApplicationContextConfig:通过工厂方法的Bean实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.hibernate.SessionFactory]:工厂方法'getSessionFactory'抛出异常;嵌套异常是java.lang.NoSuchMethodError:javax.persistence.Table.indexes()[Ljavax / persistence / Index;在org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)位于org.springframework.beans.factory的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123) . support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory . java:482)org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)at org . springframework.beans.factory.support.AbstractBeanFactory.doGet位于org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)的org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)中的Bean(AbstractBeanFactory.java:302) org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1214)org.springframework.beans.factory.factory上的org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054) .support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019)org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835)org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver) .java:741)... 13更多引起:org.springframework.beans.BeanInstantiationException:无法实例化[org.hibernate.SessionFa ctory]:工厂方法'getSessionFactory'抛出异常;嵌套异常是java.lang.NoSuchMethodError:javax.persistence.Table.indexes()[Ljavax / persistence / Index; org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)... 27更多引起: java.lang.NoSuchMethodError:javax.persistence.Table.indexes()[Ljavax / persistence / Index;在在org.hibernate.boot.model.source.internal.annotations org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:1106)在org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:774) .AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:245)位于org.hibernate.boot.model.process.spi.MetadataBuildingProcess的org.hibernate.boot.model.process.spi.MetadataBuildingProcess $ 1.processEntityHierarchies(MetadataBuildingProcess.java:222) . 在org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)的org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)上完成(MetadataBuildingProcess.java:265)在org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)在org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691)在org.hibernate.cfg.Configuration.buildSessionFactory(Configura tion.java:723)org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)at com.niit.shoppingcart.config.ApplicationContextConfig.getSessionFactory(ApplicationContextConfig.java:56)at com.niit.shoppingcart .config.ApplicationContextConfig $$ EnhancerBySpringCGLIB $$ 449f4899.CGLIB $ getSessionFactory $ 1()at com.niit.shoppingcart.config.ApplicationContextConfig $$ EnhancerBySpringCGLIB $$ 449f4899 $$ FastClassBySpringCGLIB $$ 7c760c88.invoke()at org.springframework.cglib . 在com.niit.shoppingcart.config.ApplicationContextConfig $$ EnhancerBySpringCGLIB $$ 449f4899的org.springframework.context.annotation.ConfigurationClassEnhancer $ BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356)上的proxy.MethodProxy.invokeSuper(MethodProxy.java:228) . 了getSessionFactory()在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMetho dAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)的java.lang.reflect.Method.invoke(Method.java:498)中 . 还有28个
This is ApplicationContextConfig.java file
package com.niit.shoppingcart.config;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBuilder;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.niit.shoppingcart.dao.CategoryDAO;
import com.niit.shoppingcart.dao.CategoryDAOImpl;
import com.niit.shoppingcart.model.Category;
import com.niit.shoppingcart.model.Product;
import com.niit.shoppingcart.model.Supplier;
import com.niit.shoppingcart.model.UserDetails;
@Configuration
@ComponentScan("com.niit.shoppingcart")
@EnableTransactionManagement
public class ApplicationContextConfig {
@Bean(name = "dataSource")
public DataSource getDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:tcp://localhost/~/test");
dataSource.setUsername("sa");
dataSource.setPassword("");
return dataSource;
}
private Properties getHibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.hbm2ddl.auto","update");
properties.put("hibernate.show_sql", "true");
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
return properties;
}
@Autowired
@Bean(name = "sessionFactory")
public SessionFactory getSessionFactory(DataSource dataSource) {
LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
sessionBuilder.addProperties(getHibernateProperties());
sessionBuilder.addAnnotatedClasses(Category.class);
sessionBuilder.addAnnotatedClasses(Supplier.class);
sessionBuilder.addAnnotatedClasses(UserDetails.class);
sessionBuilder.addAnnotatedClasses(Product.class);
return sessionBuilder.buildSessionFactory();
}
@Autowired
@Bean(name = "transactionManager")
public HibernateTransactionManager getTransactionManager(
SessionFactory sessionFactory) {
HibernateTransactionManager transactionManager = new HibernateTransactionManager(
sessionFactory);
return transactionManager;
}
@Autowired
@Bean(name = "categoryDAO")
public CategoryDAO getCategorDAO(SessionFactory sessionFactory) {
return new CategoryDAOImpl(sessionFactory);
}
}
This is the java test file in which the exception is occurring
package com.niit.shoppingcart;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.niit.shoppingcart.dao.CategoryDAO;
import com.niit.shoppingcart.model.Category;
public class CategoryTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext();
context.scan("com.niit.shoppingcart");
context.refresh();
CategoryDAO categoryDAO = (CategoryDAO) context.getBean("categoryDAO");
Category category = (Category) context.getBean("category");
category.setC_id("cg1234");
category.setC_name("phone");
category.setC_desc("This is the first category");
if (categoryDAO.save(category) == true) {
System.out.println("Category created");
} else {
System.out.println("Unable to create category");
}
}
}
1 回答
测试类并没有真正正确加载Spring Boot上下文 . 您所做的只是根据您正在扫描的包
com.niit.shoppingcart
加载bean . 如果你希望以你的方式"test"你的应用程序,我会建议像:更好的方法是使用JUnit进行测试 . 以下是代码看起来像JUnit测试的方式: