SSM 注解配置方式整合

文章目录

  • Bean注解
  • 使用注解方式代替 web.xml 文件
  • Spring注解方式整合Mybatis
  • 事务管理器配置
  • 请求与响应
  • @EnableWebMvc 注解
  • REST 风格
  • RestController
  • ComponentScan
  • 静态资源放行
  • 表现层数据封装
  • @EnableAspectJAutoProxy(AOP注解方式)
  • AOP 通知获取数据(参数,返回值,异常)
  • 异常处理器
  • 项目异常处理
  • 拦截器
  • Maven 相关
    • 分模块开发
    • 依赖传递
    • 可选依赖与排除依赖
    • 依赖冲突
    • 聚合
    • 继承
    • 属性
    • 配置文件加载属性
    • 版本管理
    • 多环境开发
    • 跳过测试
    • 私服


Bean注解

用户自定义的类可以用 @Service、@Controller 等注解将其标注,使用注解扫描方式使得 Spring 去创建这些 bean 对象。
Q:第三方的类如何使用注解方式使 Spring 去创建呢?
A:@Bean 注解声明

DataSourceConfiguration.java

@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {

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

    @Bean("dataSource")
    public DataSource getDataSource(User user) throws PropertyVetoException {
        System.out.println("-----加载数据源-------");
        System.out.println(user);
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        return dataSource;
    }

}

SpringConfiguration.java

@Configuration
@ComponentScan("com.xmu")
@Import({DataSourceConfiguration.class})
public class SpringConfiguration {
}

第三方 bean 依赖注入

  • 引用类型:方法形参
    SSM 注解配置方式整合_第1张图片

  • 简单类型:成员变量

SSM 注解配置方式整合_第2张图片

使用注解方式代替 web.xml 文件

ServletContainersInitConfig.java

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMVCConfig.class};
    }

    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}

pom.xml 中导入插件

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.tomcat.mavengroupId>
      <artifactId>tomcat7-maven-pluginartifactId>
      <version>2.1version>
      <configuration>
        <port>8080port>
        <path>/path>
      configuration>
    plugin>
  plugins>
build>

SSM 注解配置方式整合_第3张图片

Spring注解方式整合Mybatis

DataSourceConfig.java

@PropertySource("classpath:jdbc.properties")
public class DataSourceConfig {

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

    @Bean("dataSource")
    public DataSource getDataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        return dataSource;
    }
	// 事务管理器
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource){
        DataSourceTransactionManager ds = new DataSourceTransactionManager();
        ds.setDataSource(dataSource);
        return ds;
    }
}

使用注解方式使 Spring 容器去产生 Mapper 类的对象
MybatisConfig.java

public class MybatisConfig {

    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
        ssfb.setTypeAliasesPackage("com.xmu.domain");
        ssfb.setDataSource(dataSource);
        return ssfb;
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.xmu.mapper");
        return msc;
    }

}

事务管理器配置

首先在 SpringConfig 上加 @EnableTransactionManagement 注解
SSM 注解配置方式整合_第4张图片

配置 事务管理器的 Bean
SSM 注解配置方式整合_第5张图片
接口上加 @Transactional
SSM 注解配置方式整合_第6张图片

请求与响应

请求体中有数据,转换成 Java 对象,Controller 层方法形参 ➕ @RequestBody;
请求参数中有数据,转换成 Java 对象,Controller 层方法形参 ➕ @RequestParam;

@RequestMapping("/addUsers")
public void addUsers(@RequestBody List<User> userList){
}

@RequestMapping("/addNames")
public void addNames(@RequestParam List<String> nameList){
}

@EnableWebMvc 注解

注意:SpringMvcSupport 继承 WebMvcConfigurationSupport 与 @EnableWebMvc 同时使用会失效
SSM 注解配置方式整合_第7张图片

@EnableWebMvc:可以开启由 json 数据 转换成对象的开关
eth:请求体中是 Json 数据,而 Controller 层方法形参是 Java 对象

@Configuration
@ComponentScan("com.xmu.controller")
@EnableWebMvc  // 可以开启由 json 数据 转换成对象的开关
public class SpringMVCConfig {

    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/pages/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }
}

REST 风格

@RequestMapping("/user/{id}")
public void method(@PathVariable Integer id){}

SSM 注解配置方式整合_第8张图片

RestController

@RestController = @Controller + @ResponseBody

ComponentScan

@ComponentScan(value = "com.xmu",
    excludeFilters = @ComponentScan.Filter(
        type = FilterType.ANNOTATION,
        classes = Controller.class
    )
)

静态资源放行

注意:SpringMvcSupport 继承 WebMvcConfigurationSupport 与 @EnableWebMvc 同时使用会失效
SSM 注解配置方式整合_第9张图片
其它方式解决

SpringMVCConfig 去实现WebMvcConfigure 接口的方法,这样就不用 SpringMvcSupport 继承 WebMvcConfigurationSupport,而且也不用扫描 config
SSM 注解配置方式整合_第10张图片

步骤:
SSM 注解配置方式整合_第11张图片
SSM 注解配置方式整合_第12张图片

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 静态资源放行
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
    }
}

表现层数据封装

后端响应格式
SSM 注解配置方式整合_第13张图片

设置统一数据返回结果类
SSM 注解配置方式整合_第14张图片
SSM 注解配置方式整合_第15张图片

设置统一数据返回结果编码SSM 注解配置方式整合_第16张图片

Controller 层根据操作结果返回 Result
SSM 注解配置方式整合_第17张图片

@EnableAspectJAutoProxy(AOP注解方式)

启动 AOP注解开发
SSM 注解配置方式整合_第18张图片
SSM 注解配置方式整合_第19张图片

AOP 通知获取数据(参数,返回值,异常)

获取切入点参数
SSM 注解配置方式整合_第20张图片
SSM 注解配置方式整合_第21张图片

这里 proceed 的 args 可以不传递(效果一致),但是如果要对参数修改的话,传递的时候一定要传 args 参数

在这里插入图片描述

获取返回值
returning 参数指定接收返回值的对象名称,一般这里的对象用 Object 类型接收,此处的 JoinPoint 参数可写可不写,写的话要放在前面的位置。

SSM 注解配置方式整合_第22张图片

获取异常

SSM 注解配置方式整合_第23张图片
SSM 注解配置方式整合_第24张图片

异常处理器

SSM 注解配置方式整合_第25张图片

  1. 声明这个类是做异常处理的(@RestControllerAdvice)
  2. 在这个类中实现一个方法处理异常(@ExceptionHandler(异常类型))

SSM 注解配置方式整合_第26张图片
SSM 注解配置方式整合_第27张图片

项目异常处理

1. 自定义异常类

SSM 注解配置方式整合_第28张图片

2. 自定义异常编码

SSM 注解配置方式整合_第29张图片

3. 触发自定义异常

SSM 注解配置方式整合_第30张图片

4. 拦截并处理异常

5. 前端效果

SSM 注解配置方式整合_第31张图片

拦截器

  1. 编写拦截器类实现 HandlerInterceptor 接口,并实现它的方法,用 @Component 注解将其加入 Spring 容器
    SSM 注解配置方式整合_第32张图片
  2. 实现 addInterceptors方法,添加拦截的 Bean 与拦截路径

SSM 注解配置方式整合_第33张图片
3. 开启注解扫描这两个类

SSM 注解配置方式整合_第34张图片

注意:SpringMvcSupport 继承 WebMvcConfigurationSupport 与 @EnableWebMvc 同时使用会失效
SSM 注解配置方式整合_第35张图片
其它方式解决

SpringMVCConfig 去实现WebMvcConfigure 接口的方法,这样就不用 SpringMvcSupport 继承 WebMvcConfigurationSupport,而且也不用扫描 config
SSM 注解配置方式整合_第36张图片

Maven 相关

分模块开发

依赖传递

可选依赖与排除依赖

依赖冲突

在这里插入图片描述

聚合

继承

属性

配置文件加载属性

版本管理

多环境开发

跳过测试

私服

你可能感兴趣的:(SSM框架笔记,Spring,Spring,MVC,Mybatis,Java,注解,整合)