Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';t组件扫描获取我的@配置?_Java_Spring_Configuration_Annotations - Fatal编程技术网

Java 为什么';t组件扫描获取我的@配置?

Java 为什么';t组件扫描获取我的@配置?,java,spring,configuration,annotations,Java,Spring,Configuration,Annotations,我有一个像这样的配置文件 package com.mypackage.referencedata.config; @Configuration @ComponentScan ("com.mypackage.referencedata.*") public class ReferenceDataConfig { 在SpringXML中,如果有 <context:component-scan base-package="com.mypackage.referencedata.config.

我有一个像这样的配置文件

package com.mypackage.referencedata.config;

@Configuration
@ComponentScan ("com.mypackage.referencedata.*")
public class ReferenceDataConfig {
在SpringXML中,如果有

<context:component-scan base-package="com.mypackage.referencedata.config.*" />

它无法加载

如果我使用

<context:component-scan base-package="com.mypackage.referencedata.*" />

它起作用了

有什么好处?我希望第一次也能成功

<context:component-scan base-package="com.mypackage.referencedata.config.*" />

可以正常工作。

您不需要在SpringFramework的组件扫描中扫描@Configuration类。但您需要在web应用程序的Application Initializer类中注册它,该类定义了web.xml文件中所需的配置。您需要在那里实现WebApplicationInitializer接口并定义onStartup方法

在onStartup方法中,您需要将@Configuration类注册到web应用程序的根上下文中。请看下面的代码片段

1。用作web.xml的类

public class ApplicationInitializer implements WebApplicationInitializer {

    //Called first when the application starts loading.
    public void onStartup(ServletContext servletContext)
            throws ServletException {
        System.out.println("Inside application initializer...");

        //Registering the class that incorporates the annotated DispatcherServlet configuration of spring
        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        rootContext.register(DispatcherConfig.class);

        //Adding the listener for the rootContext
        servletContext.addListener(new ContextLoaderListener(rootContext));

        //Registering the dispatcher servlet mappings.
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(rootContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }

}
2。web应用程序的@Configuration类保存bean和其他设置。

@EnableWebMvc
@Configuration
@ComponentScan(basePackages={"com.abcprocure.servicerepo.controller", "com.abcprocure.servicerepo.model", "com.abcprocure.servicerepo.service"})
public class DispatcherConfig extends WebMvcConfigurerAdapter {

    //Registers the url paths for resources to skip from spring. Eg. JS, CSS and images.
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // TODO Auto-generated method stub
        registry.addResourceHandler("/js/**").addResourceLocations("/js/**");
        registry.addResourceHandler("/html/**").addResourceLocations("/html/**");
    }

    //Defines the ViewResolver that Spring will use to render the views.
    @Bean
    public ViewResolver viewResolver() {
        System.out.println("Inside View Resolver...");
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");

        return viewResolver;
    }

    //Defines the DataSource to use in the application.
    @Bean
    public DataSource dataSource() {
        System.out.println("Inside DataSource bean creation....");
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        dataSource.setUrl("jdbc:sqlserver://192.168.100.131;databaseName=test");
        dataSource.setUsername("egptender");
        dataSource.setPassword("egp#123");
        return dataSource;
    }

    //Defines the Hibernate's SessionFactory.
    @Bean
    public SessionFactory sessionFactory() {
        LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource()).addAnnotatedClasses(Services.class, Operations.class, OperationParameters.class, ServiceModels.class, Businesslogic.class,TblFormMaster.class,TblFormBuilder.class);
        builder.setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");
        builder.setProperty("hibernate.show_sql", "true");
        return builder.buildSessionFactory();
    }
}

希望这对你有帮助。干杯。

如果您使用的是maven,请检查您是否具有正确的依赖项。

我的东西是现有项目的附加组件。我不想更改引导过程。我没有建议您更改引导过程。但我刚刚给出了一个例子,您不需要扫描@Configuration类,但需要在根上下文中注册它。您是对的,是讨厌的*,破坏了一切。
@EnableWebMvc
@Configuration
@ComponentScan(basePackages={"com.abcprocure.servicerepo.controller", "com.abcprocure.servicerepo.model", "com.abcprocure.servicerepo.service"})
public class DispatcherConfig extends WebMvcConfigurerAdapter {

    //Registers the url paths for resources to skip from spring. Eg. JS, CSS and images.
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // TODO Auto-generated method stub
        registry.addResourceHandler("/js/**").addResourceLocations("/js/**");
        registry.addResourceHandler("/html/**").addResourceLocations("/html/**");
    }

    //Defines the ViewResolver that Spring will use to render the views.
    @Bean
    public ViewResolver viewResolver() {
        System.out.println("Inside View Resolver...");
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");

        return viewResolver;
    }

    //Defines the DataSource to use in the application.
    @Bean
    public DataSource dataSource() {
        System.out.println("Inside DataSource bean creation....");
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        dataSource.setUrl("jdbc:sqlserver://192.168.100.131;databaseName=test");
        dataSource.setUsername("egptender");
        dataSource.setPassword("egp#123");
        return dataSource;
    }

    //Defines the Hibernate's SessionFactory.
    @Bean
    public SessionFactory sessionFactory() {
        LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource()).addAnnotatedClasses(Services.class, Operations.class, OperationParameters.class, ServiceModels.class, Businesslogic.class,TblFormMaster.class,TblFormBuilder.class);
        builder.setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");
        builder.setProperty("hibernate.show_sql", "true");
        return builder.buildSessionFactory();
    }
}