使用@Import Annotation

时间:2016-09-23 06:08:02

标签: spring-security

我已经开始研究Spring Security了。我正在从this链接做一个HelloWorld应用程序。

我的问题是,为什么我们需要@Import注释?

在使用Spring MVC时,我曾经定义过类似的配置文件,但由于它在同一个包中,我不需要导入它。为什么我在这里导入SecurityConfig.java文件呢?

我使用@Import注释的地方是这里

AppConfig.java

package com.mkyong.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

@EnableWebMvc
@Configuration
@ComponentScan({ "com.mkyong.web.*" })
@Import({ SecurityConfig.class })
public class AppConfig {

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver
                          = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/pages/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

1 个答案:

答案 0 :(得分:1)

您需要将安全性导入主应用配置类,因为它不会被@ComponentScan选中,因为该类不在扫描@ComponentScan({ "com.mkyong.web.*" })的包中。安全配置未在那里定义。您注册主要类如:

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { AppConfig.class };
    }

如果您没有将安全类导入其中,则安全性不会在应用程序中注册。