首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring MVC 純註解配置 Web 專案完整實戰

     編輯:Java 相關知識

環境要求

  • 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
  • 易於單元測試與模組化擴展
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved