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

在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 中的 <aop:aspectj-autoproxy/>
@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.valueOf(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中的 <mvc:annotation-driven/>
@ComponentScan(basePackages = {"com.liulu.bank.controller", "com.liulu.lit"},
  includeFilters = @ComponentScan.Filter(classes = Controller.class),
  useDefaultFilters = false)
public class WebConfig extends WebMvcConfigurerAdapter {

 /**
  * 设置由 web容器处理静态资源 ,相当于 xml中的<mvc:default-servlet-handler/>
  */
 @Override
 public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  configurer.enable();
 }

 /**
  * 下面三个bean 配置 Thymeleaf 模板
  * @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;
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索spring
MVC配置web
springmvc注解配置、springmvc非注解配置、springmvc全注解配置、springmvc4全注解配置、spring mvc4 注解配置,以便于您获取更多的相关知识。

时间: 2024-11-03 04:58:39

Spring MVC完全注解方式配置web项目_java的相关文章

Spring MVC 通过注解方式获取不到request

问题描述 按照网上的方法用@Autowiredprivate HttpServletRequest request;但是获取不到,以为要加监听,加了监听还是不行<listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> 一启动就报错,报错如下,求解org.springframew

Spring MVC 原子学习法 之 web.xml 中的配置

Spring MVC  原子学习法 之  web.xml 中的配置 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 由上图可以看得出,Spring-MVC 应用的配置要从 JavaWeb 的配置

spring事务-spring AOP 拦截器方式配置事务失效

问题描述 spring AOP 拦截器方式配置事务失效 Spring.xml配置如下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:conte

Spring IoC — 基于注解的配置

原文:Spring IoC - 基于注解的配置 基于XML的配置,Bean定义信息和Bean实现类本身是分离的,而采用基于注解的配置方式时,Bean定义信息即通过在Bean实现类上标注注解实现. @Component:对类进行标注,Spring容器自动将POJO转换为容器管理的Bean: @Repository:用于对DAO实现类进行标注: @Service:用于对Service实现类进行标注: @Controller:用于对Controller实现类进行标注.   1.自动装配Bean:  

Spring MVC 多数据源,配置完事务之后就不能正常切换数据源,求大神指点

问题描述 Spring MVC 多数据源,配置完事务之后就不能正常切换数据源,求大神指点 两张附图事务没配置的时候数据源切换正常,加上事务之后就一直显示的是默认连接的数据源, 这是为什么啊??百思不得其解,,求神哥神姐解惑啊 这个是数据源切换代码 切换的时候就是 每次在掉底层方法之前先设置下数据库 向下面这样 MultipleDataSource.setDataSourceKey("yz_dataSource"); MultipleDataSource.setDataSourceKey

spring注解方式配置的事务管理在RuntimeException下不回滚

问题描述 service层方法@Transactional(propagation=Propagation.REQUIRED)publicvoidaddUser(Useruser){getUserDao().addUser(user);thrownewRuntimeException();} spring的配置文件<!--配置事务管理器--><beanid="transactionManager"class="org.springframework.orm.

Spring MVC 基础注解之@RequestMapping、@Controller、(二)

我现在学的是spring4.2 今天主要学习了Spring MVC注解  引入注解可以减少我们的代码量,优化我们的代码. @Controller:用于标识是处理器类: @RequestMapping:请求到处理器功能方法的映射规则: 还是以示例来解释说明   1 创建springAnnotation02项目,导入jar包.    这里的web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app x

Spring MVC框架的高级配置

高级 本文将为您提供关于Spring MVC框架的配置技巧,以帮助管理基于Spring的web应用程序的多个实例.本配置管理主题常被学术界所忽略,但是,这对于现实的web开发尤为重要.本主题并不直接关联任何具体的技术,因此,我们将从最基本的概念开始对这个问题进行说明.下面,我们将根据Spring MVC框架,为基于本技术开发的项目提供一系列的解决方案. Spring配置 人们经常会在一台以上的主机上配置一种Web应用程序.例如,在生产中,一个网站可能只有一个实例.除了此实例外,开发人员可以在用于

spring MVC 使用注解返回json

使用spring MVC框架时,如何使用注解返回json呢? Java代码   @ResponseBody       @RequestMapping(value = "/login")       public ModelAndView ajaxLogin(Model model,User user,HttpServletRequest request, HttpSession session){           String errorMessage=loginCommon(m