SpringMVC组件

 

入口


@SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } }


## 配置

`@EnableWebMvc`把`DelegatingWebMvcConfiguration.class`导入IOC容器。  
如果没有自定义,那么默认会使用`WebMvcAutoConfiguration.class`。  
如果自定义`WebMvcConfigurer.interface`,那么会使用`WebMvcConfigurationSupport.class`。  
如果自定义`WebMvcConfigurer.interface`不够用,就继承`WebMvcConfigurationSupport.class`。 

`@Configuration`用于定义配置类,可替换`xml配置文件`,被注解的类内部包含有一个或多个被`@Bean`注解的方法,这些方法将会被`AnnotationConfigApplicationContext.class`或`AnnotationConfigWebApplicationContext.class`进行扫描,并用于构建`bean定义`,初始化Spring容器。  

@EnableWebMvc @Configuration public class MainConfiguration implements WebMvcConfigurer {

public void configurePathMatch(PathMatchConfigurer configurer) {
}

public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
}

public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
}

// 配置servlet静态资源处理器
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
}

public void addFormatters(FormatterRegistry registry) {
}

// 配置拦截器
public void addInterceptors(InterceptorRegistry registry) {
}

// 配置spring mvc静态资源处理器
public void addResourceHandlers(ResourceHandlerRegistry registry) {
}

// 配置跨域处理
public void addCorsMappings(CorsRegistry registry) {
}

// 配置视图跳转控制器
public void addViewControllers(ViewControllerRegistry registry) {
}

// 配置视图解析器
public void configureViewResolvers(ViewResolverRegistry registry) {
}

public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
}

public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
}

// 配置报文转换器
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
}

public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
}

public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
}

public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
}

@Nullable
public Validator getValidator() {
    return null;
}

@Nullable
public MessageCodesResolver getMessageCodesResolver() {
    return null;
} } ```

控制器

@RequestBody标记在参数上,将Http请求报文body区使用适合的HttpMessageConverter转换成对象后写入某个方法。

@ResponseBody标记在方法上,作用是将Controller的方法返回的对象通过适当的HttpMessageConverter转换为指定的格式之后,写入到Http响应报文body区,通常用来返回JSON数据或者是XML数据。在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中。

@Controller标记在类上,使用它标记的类就是一个ControllerDispatcher会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。用来响应页面。

@RestController标记在类上,是@ResponseBody@Controller的组合注解。用来响应Http响应报文

@RequestMapping标记在方法和类上,用来映射请求。 GetMappingDeleteMappingPatchMappingPostMappingPutMapping

@RestController
public class MainController {

    @RequestMapping(
    	name
    	value  // 指定请求的实际地址
    	method  // 指定请求的method类型
    	params  // 指定request中必须包含某些参数值是,才让该方法处理
    	headers  // 指定request中必须包含某些指定的header值,才能让该方法处理请求
    	consumes  // 指定处理的Content-Type
    	produces  // 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该类型才返回
    )
    public Response fun(
      	@RequestAttribute(value, required)  // 访问由过滤器创建的属性
    	@RequestHeader(value, required, defaultValue)  // 访问Http请求报文中header区的键值对
    	@RequestPart(value, required)  // Content-Type 为 multipart/form-data 时 part 为复杂对象(文件、JSON、XML)
    	@RequestBody(required)  // 访问Http请求报文中body区转换成的对象
    	@RequestParam(value, required, defaultValue)  // URL中的键值对、form data中的键值对、Content-Type 为 multipart/form-data 时 part 为键值对
    	Long id,  // 等价于 RequestParam(value = id) Long
    ) {
        ......
        return response;
    }

服务

@Service标记在类上,使用它标记的类就是一个Service。把Service注入Controller,用来执行业务逻辑。

DAO

DAO注入Service,用于从数据库读取数据,提供给Service

JDBC API

Spring Data JPA

POM
<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-jpa</artifactId>
</dependency>
CrudRepository
public interface CrudRepository<T, ID> extends Repository<T, ID> {
	<S extends T> S save(S var1);

	<S extends T> Iterable<S> saveAll(Iterable<S> var1);

	Optional<T> findById(ID var1);

	boolean existsById(ID var1);

	Iterable<T> findAll();

	Iterable<T> findAllById(Iterable<ID> var1);

	long count();

	void deleteById(ID var1);

	void delete(T var1);

	void deleteAll(Iterable<? extends T> var1);

	void deleteAll();
}
PagingAndSortingRepository
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
    Iterable<T> findAll(Sort var1);

    Page<T> findAll(Pageable var1);
}
JpaRepository
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();

    List<T> findAll(Sort var1);

    List<T> findAllById(Iterable<ID> var1);

    <S extends T> List<S> saveAll(Iterable<S> var1);

    void flush();

    <S extends T> S saveAndFlush(S var1);

    void deleteInBatch(Iterable<T> var1);

    void deleteAllInBatch();

    T getOne(ID var1);

    <S extends T> List<S> findAll(Example<S> var1);

    <S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
自定义查询

Spring Data JDBC

MyBatis Framework