Spring Boot 中加载XML配置
虽然Spring Boot中已经没有了XML配置文件,但是从技术的角度上,我们需要如果在Spring Boot中加载配置文件,那么该如何进行加载,其实很简单,只需要一个注解就可以解决。
首先创建一个bean,这个bean中没有任何注解
package com.choi.xml;
/**
* @Author ChoiBin
* @Date 2019-07-30 14:21
* @Version 1.0
*/
public class SayHello {
public String sayHello(){
return "hello!";
}
} 在resources中创建beans.xml文件并且配置上面这个bean
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="com.choi.xml.SayHello" id="sayHello"/> </beans>
创建一个配置类,这个配置类中需要添加两个注解,@Configuration和@ImportResource(locations = "classpath:beans.xml")
package com.choi.xml;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
/**
* @Author ChoiBin
* @Date 2019-07-30 14:22
* @Version 1.0
*/
@Configuration
@ImportResource(locations = "classpath:beans.xml")
public class WebMvcConfig {
} 通过这个两个注解,就可以将XML文件进行加载,使用单元测试进行测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class XmlApplicationTests {
@Autowired
private SayHello sayHello;
@Test
public void contextLoads() {
System.out.println(sayHello.sayHello());
}
} 测试结果
Sprint Boot中如何注册***
自己实现一个***,添加到容器当中
package com.choi.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Author ChoiBin
* @Date 2019-07-30 14:35
* @Version 1.0
*/
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion");
}
} 新建一个配置类,实现WebMvcConfigurer中的addInterceptors()方法
package com.choi.interceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @Author ChoiBin
* @Date 2019-07-30 14:37
* @Version 1.0
*/
@Component
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor()).addPathPatterns("/**");
}
@Bean
public MyInterceptor myInterceptor(){
return new MyInterceptor();
}
} 创建一个controller,进行测试
package com.choi.interceptor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author ChoiBin
* @Date 2019-07-30 14:39
* @Version 1.0
*/
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
} 测试结果
Spring Boot中如何整合web基础组件
web基础组件包括:servlet、listener、filter,那么在Spring Boot中又如何进行整合?
分别创建servlet、listener、filter
package com.choi.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author ChoiBin
* @Date 2019-07-30 14:48
* @Version 1.0
*/
@WebServlet(urlPatterns = "/myservlet")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("myservlet");
}
} package com.choi.web;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
/**
* @Author ChoiBin
* @Date 2019-07-30 14:51
* @Version 1.0
*/
@WebListener
public class MyListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("requestDestroyed");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("requestInitialized");
}
} package com.choi.web;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* @Author ChoiBin
* @Date 2019-07-30 14:49
* @Version 1.0
*/
@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("myfilter");
filterChain.doFilter(servletRequest,servletResponse);
}
} 在启动类中添加一个注解,启动时将他们加载进项目中
package com.choi.web;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan(basePackages = "com.choi.web")
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
} 访问http://localhost:8080/myservlet,运行结果如下
Spring Boot中的路径映射
在日常开发时,我们有时候需要返回一个动态模板,比如thymeleaf,这种动态模板是放在template目录下的,如果需要访问那么我们就需要创建一个controller来进行访问。
如果一个动态页面,不需要传递任何数据进行页面的渲染,只是进行一次页面跳转,那么我们就没有必要给它写一个controller进行跳转,那么我们又该如何进行映射?Spring MVC和Spring Boot中都提供了方案进行解决。
创建一个配置类
package com.choi.pathmapping;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @Author ChoiBin
* @Date 2019-07-30 15:07
* @Version 1.0
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/hello").setViewName("hello");
}
} 访问http://localhost:8080/hello,运行结果如下:
Spring Boot中使用类型转换器
类型转换在开发中我们是常见的,比如前段状态一个String类型的日期数据,而我们后台是用Data的数据类型来进行接收,这样数据类型对不上,就会发生错误。如下所示
解决方案如下,创建一个类型转换器
package com.choi.paramconverter;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author ChoiBin
* @Date 2019-07-30 15:18
* @Version 1.0
*/
@Component
public class DataConverter implements Converter<String, Date> {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Date convert(String s) {
if(s != null && !"".equals(s)){
try {
return simpleDateFormat.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
} Converter<String, Date>指的是接收的参数类型是String,需要转换后的类型是Date
运行结果:

京公网安备 11010502036488号