首页 > 其他分享 >使用注解替换Spring配置文件&SpringMVC的配置文件

使用注解替换Spring配置文件&SpringMVC的配置文件

时间:2024-01-31 21:23:03浏览次数:23  
标签:jdbc return 配置文件 SpringMVC Spring 视图 Override new public

创建初始化类,替换web.xml

  • Servlet3.0环境中,Web容器(Tomcat)会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。

  • Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类反过来又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成。

  • Spring3.2引入了一个便利的WebApplicationInitializer基础实现,名为AbstractAnnotationConfigDispatcherServletInitializer,当我们的类扩展了AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自动发现它,并用它来配置Servlet上下文。

/**
 * @Author: lisong
 * @CreateTime: 2024-01-31 17:36 星期三
 * @Description: 当前类替换web.xml配置文件
 */
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {

    //设置spring配置类,替代spring.xml配置文件
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    //设置springmvc配置类,替代springmvc.xml配置文件
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMVCConfig.class};
    }

    //设置SpringMVC的前端控制器DispatcherServlet的url-patten
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    //设置当前工程的过滤器
    @Override
    protected Filter[] getServletFilters() {
        //创建字符编码过滤器对象
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        //设置字符编码
        characterEncodingFilter.setEncoding("UTF-8");
        //设置请求和响应的编码
        characterEncodingFilter.setForceEncoding(true);

        //创建rest风格请求方式的过滤器对象
        HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
        return new Filter[]{characterEncodingFilter,hiddenHttpMethodFilter};
    }
}

创建Sping配置类,替换Spring的配置文件

@Configurable
@PropertySource("classpath:jdbc.properties")
public class SpringConfig {
    //声明成员属性
    @Value("${jdbc.driver}") //将jdbc.properties中的信息初始化到属性中
    private String driver;

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    //配置数据源
    @Bean
    public DruidDataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }

    //配置jdbc模板,将数据源注入到模板中
    @Bean
    public JdbcTemplate jdbcTemplate(DruidDataSource dataSource) {
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }
}

jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/dbtest1
jdbc.username=root
jdbc.password=123456

创建SpringMVC配置类,替换SpringMVC配置文件

/**
 * @Author: lisong
 * @CreateTime: 2024-01-31 17:40 星期三
 * @Description:该类替换springmvc.xml
 */
@Configurable //标识为配置类
@ComponentScan(basePackages = {"com.evan"})
@EnableWebMvc //开启mvc注解
public class SpringMVCConfig implements WebMvcConfigurer {

    //配置Spring视图模板解析器的相关策略
    @Bean
    public ITemplateResolver templateResolver() {
        //创建spring视图模板解析器对象
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        //设置视图字符集
        templateResolver.setCharacterEncoding("UTF-8");
        //设置视图优先级
        templateResolver.setOrder(1);
        //设置视图模式
        templateResolver.setTemplateMode("HTML5");
        //设置视图前缀
        templateResolver.setPrefix("/WEB-INF/views/");
        //设置视图后缀
        templateResolver.setSuffix(".html");
        return templateResolver;
    }

    //生成Spring的模板引擎,并为模板引擎注入模板解析器
    @Bean
    public TemplateEngine templateEngine(ITemplateResolver iTemplateResolver) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(iTemplateResolver);
        return templateEngine;
    }

    //生成Thymeleaf视图解析器,并为视图解析器注入spring的模板引擎
    @Bean
    public ViewResolver thymeleafViewResolver(SpringTemplateEngine templateEngine) {
        ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
        thymeleafViewResolver.setCharacterEncoding("UTF-8");
        thymeleafViewResolver.setOrder(1);
        thymeleafViewResolver.setTemplateEngine(templateEngine);
        return thymeleafViewResolver;
    }

    //配置文件上传解析器
    @Bean
    public CommonsMultipartResolver multipartResolver() {
        return new CommonsMultipartResolver();
    }

    //配置拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //创建自定义拦截器实现类对象
        FirstInterceptor firstInterceptor = new FirstInterceptor();
        //配置拦截所有请求路径,排除/hello请求
        registry.addInterceptor(firstInterceptor).addPathPatterns("/**")
                .excludePathPatterns("/hello");
    }

    //配置视图控制器
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //设置视图控制器策略
        registry.addViewController("/").setStatusCode(HttpStatus.OK).setViewName("index");
    }

    //配置默认的servlet处理静态资源
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        //开启默认的servlet静态资源处理
        configurer.enable();
    }

    //配置异常处理器
    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
        //创建自定义异常处理器对象
        SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
        //创建属性对象
        Properties properties = new Properties();
        //注入全类名异常,并指定异常逻辑视图
        properties.setProperty("java.lang.ArithmeticException","error");
        //将异常属性注入到异常映射中
        exceptionResolver.setExceptionMappings(properties);
        //将异常信息注入到请求域中,浏览器可以通过请求域获取异常信息
        exceptionResolver.setExceptionAttribute("ex");
        //添加异常解析器
        resolvers.add(exceptionResolver);
    }
}

创建自定义拦截器

@Component
public class FirstInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("FirstInterceptor->preHandle");
        return HandlerInterceptor.super.preHandle(request,response,handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("FirstInterceptor->postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("FirstInterceptor->after");
    }
}

创建视图index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h1>index.html</h1>
<a th:href="@{/test/error}">测试异常处理器</a>
</body>
</html>

创建视图error.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>错误</title>
</head>
<body>
<h1>error.html</h1>
<hr>
<p th:text="${ex}"/>
</body>
</html>
测试
@Controller
public class TestController {

    @GetMapping("/test/error")
    public String testError() {
        System.out.println(10 / 0);
        return "success";
    }
}

标签:jdbc,return,配置文件,SpringMVC,Spring,视图,Override,new,public
From: https://www.cnblogs.com/lisong0626/p/17999933

相关文章

  • SpringMVC之异常处理器的使用
    SpringMVC的异常处理器是处理控制器方法执行过程出现的异常。SpringMVC提供了一个处理异常的接口HandlerExceptionResolver。HandlerExceptionResolver接口有两个实现类:DefaultHandlerExceptionResolver实现类和SimpleMappingExceptionResolver实现类。DefaultHandlerExcepti......
  • 【Spring】- 任意方法替换
    【任意方法替换】方法注入的一种不太有用的形式是能够用另一种方法实现替换托管bean中的任意方法实现org.springframework.beans.factory.support.MethodReplacer接口的类提供了新的方法定义publicclassMyValueCalculator{publicStringcomputeValue(Stringinput){......
  • Java调用ChatGPT(基于SpringBoot和Vue)实现连续对话、流式输出和自定义baseUrl
     源码及更详细的介绍说明参见Git上的README.md文档https://github.com/asleepyfish/chatgpt本文Demo(SpringBoot和Main方法Demo均包括)的Git地址:https://github.com/asleepyfish/chatgpt-demo流式输出结合Vue前端的Demo的Git地址:https://github.com/asleepyfish/chatg......
  • SpringMVC拦截器的使用
    SpringMVC中的拦截器主要用于拦截控制器方法的执行。SpringMVC配置拦截器SpringMVC中的拦截器需要实现HandlerInterceptor接口publicclassFirstInterceptorimplementsHandlerInterceptor{//该方法是在控制器方法执行前执行@OverridepublicbooleanpreHandl......
  • SpringBoot中两种常用定位切点的方法
    有时候,我们使用AOP来进行放的增强,编写切面类的时候,需要定位在哪个方法上试用该切面进行增强,本文主要讲解两种在SpringBoot中定位切点的方法,一种是使用execution表达式的方法,一种则是利用自定义注解的方法。execution表达式execution表达式的方式主要是在定义切点的时候,通过表达......
  • SpringBoot介绍
    SpringBoot一、介绍我们在搭建传统SSM项目时,通常需要导入很多依赖,但每种依赖又有许多版本,这就很容易出现依赖冲突。此外,繁琐的配置也是一大痛点,太多了,让人很难记住,因此SpringBoot诞生了。SpringBoot是对Spring的深度封装,基于约定优于配置的思想,提供了大量的默认配置和实现。......
  • 基于springboot开发的工作流系统,bpmn.js,vue源码及功能分析(activiti)
    前言activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。一、项目形式springboot+vue+activiti集成了activiti在线编辑器,流行的前后端分离部署开发模式,快速开发平台,可插拔工作流服务。工作......
  • Spring事务的传播行为
    Spring事务的传播行为1.概述当我们遇到下面的情况时,一个service中调用了另一个service中的方法(两个service中都存在事务),此时bservice中的事务就被传播到了aservice中,这样就产生了事务的传播。@SercicepublicclassAservice{@AutoWiredprivateBservicebservice......
  • handler机制探究——Spring MVC的Handler
    Handler机制主要涉及以下几个方面:Handler类:它是用于处理消息的对象,通常用来在不同的线程之间传递消息。Message类:这是消息对象,包含了有关消息的数据以及目标处理器的引用。MessageQueue类:这是一个存储消息的对象,按照一定的顺序排列。Looper类:它的内部是一个死循环,不断地从Me......
  • SpringBoot 整合多数据源的事务问题
    代码先贴代码:核心就是:Spring给我们提供的一个类AbstractRoutingDataSource,然后我们再写一个切面来切换数据源,肯定要有一个地方存储key还要保证上下文都可用,所以我们使用ThreadLocal来存储数据源的keypom.xml<dependency><groupId>org.springframework.boot</gr......