我将spring-mvc与java config和spring-security一起使用。
正如states in docs我将SecurityConfig.class
放入rootContext
。
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SecurityConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
在安全配置中,我需要注入最终需要UserDetailsService
和UserDao
的{{1}}。所以我需要添加SessionFactory
以使这些依赖项可用于rootContext。
@ComponentScan({ "my.package" })
然而,servletContext中也需要@Configuration
@EnableWebSecurity
@ComponentScan({ "my.package" })
class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
...
}
和UserDao
,反过来它们是通过SessionFactory
创建的。
最后,这些bean被复制并出现在WebConfig.class
和rootContext
中。
我该怎样防止这种情况?