• SSM 注解配置方式整合



    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;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    SpringConfiguration.java

    @Configuration
    @ComponentScan("com.xmu")
    @Import({DataSourceConfiguration.class})
    public class SpringConfiguration {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    第三方 bean 依赖注入

    在这里插入图片描述

    使用注解方式代替 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};
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    使用注解方式使 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;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    事务管理器配置

    首先在 SpringConfig 上加 @EnableTransactionManagement 注解
    在这里插入图片描述

    配置 事务管理器的 Bean
    在这里插入图片描述
    接口上加 @Transactional
    在这里插入图片描述

    请求与响应

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

    @RequestMapping("/addUsers")
    public void addUsers(@RequestBody List<User> userList){
    }
    
    @RequestMapping("/addNames")
    public void addNames(@RequestParam List<String> nameList){
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    @EnableWebMvc 注解

    注意:SpringMvcSupport 继承 WebMvcConfigurationSupport 与 @EnableWebMvc 同时使用会失效
    在这里插入图片描述

    @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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    REST 风格

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

    在这里插入图片描述

    RestController

    @RestController = @Controller + @ResponseBody

    ComponentScan

    @ComponentScan(value = "com.xmu",
        excludeFilters = @ComponentScan.Filter(
            type = FilterType.ANNOTATION,
            classes = Controller.class
        )
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    静态资源放行

    注意:SpringMvcSupport 继承 WebMvcConfigurationSupport 与 @EnableWebMvc 同时使用会失效
    在这里插入图片描述
    其它方式解决

    SpringMVCConfig 去实现WebMvcConfigure 接口的方法,这样就不用 SpringMvcSupport 继承 WebMvcConfigurationSupport,而且也不用扫描 config
    在这里插入图片描述

    步骤:
    在这里插入图片描述
    在这里插入图片描述

    @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/");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    表现层数据封装

    后端响应格式
    在这里插入图片描述

    设置统一数据返回结果类
    在这里插入图片描述
    在这里插入图片描述

    设置统一数据返回结果编码在这里插入图片描述

    Controller 层根据操作结果返回 Result
    在这里插入图片描述

    @EnableAspectJAutoProxy(AOP注解方式)

    启动 AOP注解开发
    在这里插入图片描述
    在这里插入图片描述

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

    获取切入点参数
    在这里插入图片描述
    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

    获取异常

    在这里插入图片描述
    在这里插入图片描述

    异常处理器

    在这里插入图片描述

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

    在这里插入图片描述
    在这里插入图片描述

    项目异常处理

    1. 自定义异常类

    在这里插入图片描述

    2. 自定义异常编码

    在这里插入图片描述

    3. 触发自定义异常

    在这里插入图片描述

    4. 拦截并处理异常

    在这里插入图片描述

    5. 前端效果

    在这里插入图片描述

    拦截器

    1. 编写拦截器类实现 HandlerInterceptor 接口,并实现它的方法,用 @Component 注解将其加入 Spring 容器
      在这里插入图片描述
    2. 实现 addInterceptors方法,添加拦截的 Bean 与拦截路径

    在这里插入图片描述
    3. 开启注解扫描这两个类

    在这里插入图片描述

    注意:SpringMvcSupport 继承 WebMvcConfigurationSupport 与 @EnableWebMvc 同时使用会失效
    在这里插入图片描述
    其它方式解决

    SpringMVCConfig 去实现WebMvcConfigure 接口的方法,这样就不用 SpringMvcSupport 继承 WebMvcConfigurationSupport,而且也不用扫描 config
    在这里插入图片描述

    Maven 相关

    分模块开发

    依赖传递

    可选依赖与排除依赖

    依赖冲突

    在这里插入图片描述

    聚合

    继承

    属性

    配置文件加载属性

    版本管理

    多环境开发

    跳过测试

    私服

  • 相关阅读:
    Linux xargs命令
    数据结构与算法-队列
    谈思生物直播—GENOVIS张洪妍抗体特异性酶切技术助力抗体药物结构表征
    DELAY_APPLY 配置参数
    WebSocket 详细教程
    第八章 强制类型转换
    使用spring cloud搭建微服务框架
    大语言模型-LLM简介
    Vivado 2017.04版本安装教程
    【MySQL面试题】经典面试题之“b+树”
  • 原文地址:https://blog.csdn.net/qq_46456049/article/details/133545492