想要找到以编程方式设置“@componentScan”的“basepackages”的方法。
我有类似的东西:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "cl.pagefoo.controller")
public class MyConfig extends WebMvcConfigurerAdapter{
...
}
我想要类似的东西:
class foo extends Something{
void init(SomethingContext sc) throws Exception{
sc.setComponentScan("cl.pagefoo.controller");
}
}
我想找到这个允许在运行时配置控制器包的理论“某事物”类。
答案 0 :(得分:3)
您可以使用WebApplicationInitializer
以编程方式创建应用程序上下文。
public class Initializer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext)
throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.scan("com.package.name");
//the rest of initialization
}
}
这是配置Web应用程序的另一种方法,因此您不再需要web.xml
。
更多阅读: http://www.intertech.com/Blog/how-to-use-springs-webapplicationinitializer/
答案 1 :(得分:0)
您有几个选择:
0.1。您实际上可以指定占位符:
@ComponentScan(basePackages = "${mypackages}")
public class MyConfig {
...
}
但是,您必须尽早填充占位符值,最好通过系统属性(-Dmypackages=somepackage
)来填充
0.2。如果您的软件包名称数量有限,可以尝试使用Spring配置文件
@ComponentScan(basePackages = "package1")
@Profile("profile1")
public class MyConfig1 {
...
}
@ComponentScan(basePackages = "package2")
@Profile("profile2")
public class MyConfig2 {
...
}