Spring MVC完全注解方式配置web项目

网友投稿 222 2023-07-03


Spring MVC完全注解方式配置web项目

在servlet 3.0 开始web项目可以完全不需要web.xml配置文件了,所以本文的配置只在支持servlet 3.0及以上的web容器中有效

使用的是spring mvc (4.3.2.RELEASE) + thymeleaf(3.0.2.RELEASE), 持久层使用的 spring的 JdbcTemplate, PS:推荐一个很好用的对JdbcTemplate封装的框架:https://github.com/selfly/dexcoder-assistant  。 下面开始具体的配置:

配置spring mvc DispatcherServlet

DispatcherServlet 是spring mvc的核心, Spring 提供了一个快速配置DispatcherServlet的类 AbstractAnnotationConfigDispatcherServletInitializer,具体代码如下:

其中 onStartup()  是 WebApplicationInitializer 接口中的方法,用户配置其他的 filter 和 listener

getRootConfigClasses() 获取配置类,我理解的相当于 applicationContext.xml 创建的上下文

getServletConfigClasses()获取配置类,相当于 mvc-servlet.xml 创建的上下文

此类上不需要任何注解

package com.liulu.bank.config;

import org.springframework.web.WebApplicationInitializer;

import org.springframework.web.filter.CharacterEncodingFilter;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.FilterRegistration;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import java.nio.charset.StandardCharsets;

/**

* User : liulu

* Date : 2016-10-7 15:12

*/

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer implements WebApplicationInitializer {

@Override

protected Class>[] getRootConfigClasses() {

return new Class>[]{RootConfig.class};

}

@Override

protected Class>[] getServletConfigClasses() {

return new Class>[]{WebConfig.class};

}

/**

* 配置DispatcherServlet 匹配的路径

* @return

*/

@Override

protected String[] getServletMappings() {

return new String[]{"/"};

}

/**

* 配置其他的 servlet 和 filter

*

* @param servletContext

* @throws ServletException

*/

@Override

public void onStartup(ServletContext servletContext) throws ServletException {

FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encodingFilter", CharacterEncodingFilter.class);

encodingFilter.setInitParameter("encoding", String.valueOf(StandardCharsets.UTF_8));

encodingFilter.setInitParameter("forceEncoding", "true");

encodingFilter.addMappingForUrlPatterns(null, false, "/*");

}

}

配置 applicationContext.xml,由RootConfig类实现

package com.liulu.bank.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import org.springframework.context.annotation.*;

import org.springframework.core.env.Environment;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import org.springframework.stereotype.Controller;

import org.springframework.transaction.PlatformTransactionManager;

import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.annotation.Resource;

import javax.sql.DataSource;

import java.beans.PropertyVetoException;

/**

* User : liulu

* Date : 2016-10-7 15:36

*/

@Configuration

@PropertySource("classpath:config.properties") // 导入属性文件

@EnableAspectJAutoProxy // 相当于 xml 中的

@EnableTransactionManagement // 开启注解事务

@ComponentScan(basePackages = {"com.liulu.lit", "com.liulu.bank"}, excludeFilters = @ComponentScan.Filter(classes = Controller.class ))

public class RootConfig {

// 上面导入的属性文件中的属性会 注入到 Environment 中

@Resource

private Environment env;

/**

* 配置数据库连接池 c3p0,

* @return

* @throws PropertyVetoException

*/

@Bean

public DataSource dataSource() throws PropertyVetoException {

ComboPooledDataSource dataSource = new ComboPooledDataSource();

dataSource.setJdbcUrl(env.getProperty("db.url"));

dataSource.setDriverClass(env.getProperty("db.driver"));

dataSource.setUser(env.getProperty("db.user"));

dataSource.setPassword(env.getProperty("db.password"));

dataSource.setMinPoolSize(Integer.valueOf(env.getProperty("pool.minPoolSize")));

dataSource.setMaxPoolSize(Integer.valueOf(env.getProperty("pool.maxPoolSize")));

dataSource.setAutoCommitOnClose(false);

dataSource.setCheckoutTimeout(Integer.vahttp://lueOf(env.getProperty("pool.checkoutTimeout")));

dataSource.setAcquireRetryAttempts(2);

return dataSource;

}

/**

* 配置事物管理器

* @param dataSource

* @return

*/

@Bean

public PlatformTransactionManager transactionManager(DataSource dataSource) {

return new DataSourceTransactionManager(dataSource);

}

@Bean

public JdbcTemplate jdbcTemplate (DataSource dataSource) {

return new JdbcTemplate(dataSource);

}

}

config.properties 文件在 resources 目录下

#数据库配置

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

配置 servlet.xml, 由WebConfig类实现

Thymeleaf  模板配置也在下面

package com.liulu.bank.config;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

import org.springframework.stereotype.Controller;

import org.springframework.web.servlet.ViewResolver;

import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import org.thymeleaf.TemplateEngine;

import org.thymeleaf.spring4.SpringTemplateEngine;

import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver;

import org.thymeleaf.spring4.view.ThymeleafViewResolver;

import org.thymeleaf.templatemode.TemplateMode;

import java.nio.charset.StandardCharsets;

/**

* User : liulu

* Date : 2016-10-7 15:16

*/

@Configuration

@EnableWebMvc // 启用 SpringMVC ,相当于 xml中的

@ComponentScan(basePackages = {"com.liulu.bank.controller", "com.liulu.lit"},

includeFilters = @ComponentScan.Filter(classes = Controller.class),

useDefaultFilters = false)

public class WebConfig extttEMOheends WebMvcConfigurerAdapter {

/**

* 设置由 web容器处理静态资源 ,相当于 xml中的

*/

@Override

public void configureDefaultServletHandling(DefaultServletHandlttEMOheerConfigurer configurer) {

configurer.enable();

}

/**

* 下面三个bean 配置 Thymehttp://leaf 模板

* @return

*/

@Bean

public SpringResourceTemplateResolver templateResolver() {

SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();

templateResolver.setPrefix("/WEB-INF/templates/");

templateResolver.setSuffix(".html");

templateResolver.setTemplateMode(TemplateMode.HTML);

templateResolver.setCharacterEncoding(String.valueOf(StandardCharsets.UTF_8));

return templateResolver;

}

@Bean

public TemplateEngine templateEngine(SpringResourceTemplateResolver templateResolver) {

SpringTemplateEngine templateEngine = new SpringTemplateEngine();

templateEngine.setTemplateResolver(templateResolver);

return templateEngine;

}

@Bean

public ViewResolver viewResolver(TemplateEngine templateEngine) {

ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();

viewResolver.setTemplateEngine(templateEngine);

viewResolver.setCharacterEncoding(String.valueOf(StandardCharsets.UTF_8));

return viewResolver;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解spring注解配置启动过程
下一篇:Angular 2应用的8个主要构造块有哪些
相关文章

 发表评论

暂时没有评论,来抢沙发吧~