環境要求
- Servlet 3.0+ 容器(Tomcat 7+、Jetty 9+)
- Spring MVC 4.3.2 + Thymeleaf 3.0.2
- 持久層:Spring JdbcTemplate
1. 初始化類:替代 web.xml
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
}
@Override protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
@Override protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override public void onStartup(ServletContext ctx) throws ServletException {
super.onStartup(ctx);
FilterRegistration.Dynamic encoding = ctx.addFilter("encoding", CharacterEncodingFilter.class);
encoding.setInitParameter("encoding", StandardCharsets.UTF_8.name());
encoding.setInitParameter("forceEncoding", "true");
encoding.addMappingForUrlPatterns(null, false, "/*");
}
}
2. 根容器配置 RootConfig
@Configuration
@PropertySource("classpath:config.properties")
@EnableAspectJAutoProxy
@EnableTransactionManagement
@ComponentScan(basePackages = {"com.liulu.bank", "com.liulu.lit"},
excludeFilters = @ComponentScan.Filter(Controller.class))
public class RootConfig {
@Resource Environment env;
@Bean public DataSource dataSource() throws PropertyVetoException {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setJdbcUrl(env.getProperty("db.url"));
ds.setDriverClass(env.getProperty("db.driver"));
ds.setUser(env.getProperty("db.user"));
ds.setPassword(env.getProperty("db.password"));
ds.setMinPoolSize(Integer.parseInt(env.getProperty("pool.minPoolSize")));
ds.setMaxPoolSize(Integer.parseInt(env.getProperty("pool.maxPoolSize")));
return ds;
}
@Bean public PlatformTransactionManager txManager(DataSource ds) {
return new DataSourceTransactionManager(ds);
}
@Bean public JdbcTemplate jdbcTemplate(DataSource ds) {
return new JdbcTemplate(ds);
}
}
3. Web 容器配置 WebConfig
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.liulu.bank.controller", "com.liulu.lit"},
includeFilters = @ComponentScan.Filter(Controller.class),
useDefaultFilters = false)
public class WebConfig extends WebMvcConfigurerAdapter {
@Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer c) {
c.enable();
}
@Bean public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver r = new SpringResourceTemplateResolver();
r.setPrefix("/WEB-INF/templates/");
r.setSuffix(".html");
r.setTemplateMode(TemplateMode.HTML);
r.setCharacterEncoding(StandardCharsets.UTF_8.name());
return r;
}
@Bean public TemplateEngine templateEngine(SpringResourceTemplateResolver r) {
SpringTemplateEngine e = new SpringTemplateEngine();
e.setTemplateResolver(r);
return e;
}
@Bean public ViewResolver viewResolver(TemplateEngine e) {
ThymeleafViewResolver v = new ThymeleafViewResolver();
v.setTemplateEngine(e);
v.setCharacterEncoding(StandardCharsets.UTF_8.name());
return v;
}
}
4. 核心屬性文件 config.properties
db.url=jdbc:mysql://192.168.182.135:3306/bank
db.driver=com.mysql.jdbc.Driver
db.user=root
db.password=123456
pool.minPoolSize=5
pool.maxPoolSize=30
pool.checkoutTimeout=1000
優勢總結
- 零 XML 配置,類型安全、易重構
- 環境分離:RootConfig 處理業務/數據源,WebConfig 專注 MVC
- 易於單元測試與模組化擴展