在基于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 文件)都没有帮助,所以错误可能出在配置中...?

【问题讨论】:

ApplicationContextApplicationContextConfig 是两种不同的类型。投票结束是错字。 当将此 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部署的微服务架构(二): 服务提供者和调用者

Java开发需要学什么!在java中创建线程有几种方法

如何在 Spring Cloud 中创建自定义 zuul 过滤器

java.security.Principal - 在 HttpServletRequest 和 Spring Security 中创建