在基于java的spring配置中创建applicationContext bean
Posted
技术标签:
【中文标题】在基于java的spring配置中创建applicationContext bean【英文标题】:Creating applicationContext bean in java based spring configuration 【发布时间】:2015-04-03 21:58:15 【问题描述】:我正在尝试使用 Java 配置从头开始构建基于 spring 的应用程序,但我收到了我完全不明白的警告... 谁能告诉我那里出了什么问题?
错误: 警告:上下文初始化期间遇到异常 - 取消刷新尝试 org.springframework.beans.factory.BeanCreationException:创建名为“applicationContext”的bean时出错:bean实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException: 无法实例化 [org.springframework.context.ApplicationContext]: 指定的类是一个接口
应用初始化器:
public class SpringWebAppInitializer implements WebApplicationInitializer
@Override
public void onStartup(ServletContext servletContext) throws ServletException
AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
appContext.register(ApplicationContext.class);
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("SpringDispatcher", new DispatcherServlet(appContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
servletContext.addListener(new ContextLoaderListener(appContext));
应用上下文配置:
@Configuration
@ComponentScan("pl.wybornie.entity.*")
@EnableTransactionManagement
public class ApplicationContextConfig
@Bean(name = "viewResolver")
public InternalResourceViewResolver getViewResolver()
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/pages/");
viewResolver.setSuffix(".jsp");
return viewResolver;
@Bean(name = "dataSource")
public DataSource getDataSource()
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/wyborniedb");
dataSource.setUsername("root");
dataSource.setPassword("root123");
return dataSource;
@Autowired
@Bean(name = "sessionFactory")
public SessionFactory getSessionFactory(DataSource dataSource)
LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
//sessionBuilder.addAnnotatedClasses(User.class);
sessionBuilder.scanPackages("pl.wybornie.entity", "pl.wybornie.entity.cookBook");
return sessionBuilder.buildSessionFactory();
@Autowired
@Bean(name = "transactionManager")
public HibernateTransactionManager getTransactionManager(SessionFactory sessionFactory)
HibernateTransactionManager transactionManager = new HibernateTransactionManager(sessionFactory);
return transactionManager;
这些只是整个项目的 2 个配置类。
完整的代码可以在以下位置找到: https://github.com/annweg/wybornie.pl/tree/new_build/project_workspace/wybornie
我是 spring 的新手,可能那里缺少一些配置...我正在使用 Spring 4.1.6、Tomcat 7 和 Java 7。
编辑: 我试图从 Spring 和我自己的配置类 ApplicationContextConfig 中注册 ApplicationContextConfig - 错误是一样的。 我已经删除了 Tomcat 服务器并创建了一个新服务器,重新打开了 Eclipse 并且仍然是一样的。 将项目导入为新项目(删除所有设置和 .project 文件)都没有帮助,所以错误可能出在配置中...?
【问题讨论】:
ApplicationContext
和 ApplicationContextConfig
是两种不同的类型。投票结束是错字。
当将此 ApplicationContextConfig 更改为 ApplicationContext 时,它会显示相同的错误消息...对我来说它没有任何意义,因为整个配置都在这些 ApplicationContextConfig 中...
否...将ApplicationContext
(属于Spring的类型)更改为ApplicationContextConfig
(你定义的类型)在onStartup
方法中。
是的,我一开始也是这样,但错误还是一样...而且我也清理了Tomcat的目录
现在的问题在于您的项目和 Eclipse。最初描述的问题是一个错字,注册ApplicationContext
而不是你的ApplicationContextConfig
。
【参考方案1】:
问题出在我的 Eclipse 设置上。我已经删除了所有项目内容,更改了工作区并复制/粘贴所有类和库,错误就消失了。
【讨论】:
【参考方案2】:嗯,这种类型的错误通常与缺少 jar 和/或类路径错误有关。检查您是否有一些库未添加到类路径中,或者项目需要一些以前存在但随后被删除的库。有时我将 jars 添加到类路径并删除它们,它可以工作。
【讨论】:
以上是关于在基于java的spring配置中创建applicationContext bean的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Security Java Config 中创建多个 HTTP 部分
如何在 Spring MVC 中的不同类中创建动态 bean
基于docker部署的微服务架构(二): 服务提供者和调用者
如何在 Spring Cloud 中创建自定义 zuul 过滤器
java.security.Principal - 在 HttpServletRequest 和 Spring Security 中创建