JavaEE简单示例——基于注解的SSM整合

基于注解的SSM整合

在之前我们进行了基于XML配置文件的整合,这次我们介绍基于注解的SSM框架的整合。基于注解的含义是将我们之前所有的配置文件用java类来代替,也就是我们会在Java类中编写之前我们之前在配置文件中编写的内容。 首先我们将之前我们编写的基于XML的SSM整合复制一份,我们基于这个项目去改造成基于注解的SSM整合最终我们的效果是要将resources文件夹下面的所有的配置文件都用Java类去代替

MyBatis的注解转换

首先还是从MyBatis开始,我们之前是基于XML配置文件开始的,而我们用到的是application-dao.xml配置文件,在这个文件中,我们配置了SqlSessionFactory和Mapper以及我们的数据源,那么现在,我们就把这些配置文件搬到Java类中。 我们首先打开我们的application-dao.xml文件查看里面的内容,在这个文件里面我们做了三件事:1.声明了数据源。2.配置SqlSessionFactory。3.配置dao层接口映射文件。那么我们就依次将这些配置文件搬出来。 首先,我们创建一个软件包叫做com.spring.config用来存放我们Java类的配置文件,然后创建第一个配置类叫做JdbcConfig,这个类用来配置数据源信息。 之前我们的数据源对象是通过一个类去帮我们代理,这个类叫做com.alibaba.druid.pool.DruidDataSource,现在我们继续使用这个类来代理我们的数据源对象,如果要使用第三方Bean时候,我们要使用@Bean注解,声明这是我们引用的Bean,并将其注册到IoC容器中。 在之前的XML配置文件中,我们要获取一个类的对象,我们需要用class指定类的全路径,然后我们就可以获取到这个类的对象。我们在类中定义一个方法,这个方法的返回值就是我们想要的对象的类型,比如现在我需要一个dataSource,那么我就把我的方法的返回值设置成dataSource,这样我们就可以在IoC容器中注册进一个dataSource类型的对象。 这个地方需要去理解一下,注意我们方法的返回值的类型即可。

package com.spring.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;

public class JdbcConfig {
    @Value("jdbc:mysql://localhost:3306/mybatis")
    private String url;
    @Value("com.mysql.cj.jdbc.Driver")
    private String driver;
    @Value("root")
    private String username;
    @Value("@gaoyang1")
    private String password;
    @Bean
    public DruidDataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUsername(username);
        dataSource.setUrl(url);
        dataSource.setPassword(password);
        dataSource.setDriverClassName(driver);
        return dataSource;
    }
}

数据源配置完成之后,我们就正式的开始配置MyBatis的配置类,我们继续在config软件包下面创建一个文件叫做MyBatisConfig。要把一个普通的类转换成Spring的配置类,我们需要在类名上添加@Configuration注解。 然后,我们需要添加SqlSessionFactory对象,根据之前我们的经验,我们要使用跟SqlSessionFactory有关的类,那么Spring整合MyBatis包里面专门为我们准备一个用于管理SqlSessionFactory的类,叫做org.mybatis.spring.SqlSessionFactoryBean,那么根据我们之前所说的,我们现在就要定义一个方法,它的返回值就是SqlSessionFactoryBean,并且我们要在方法中对SqlSessionFactory做一些配置。 对于SqlSessionFactory的配置主要就是配置我们之前就已经配置好的数据源对象。 要在一个Bean中引入另一个Bean,我们只需要在方法的参数中声明被引入的Bean的类型的对象即可,在程序运行的时候,IoC会帮我们自动将类型相同的Bean进行自动装配 比如说我现在正在编写SqlSessionFactory类,此时我们需要引入之前写好的dataSource类,那么我们就可以在SqlSessionFactoryBean方法的形参中声明一个参数,它的类型就是dataSource,我们可以在方法中正常的去使用这个类。

配置完SqlSessionFactoryBean之后,剩下的就是配置dao层接口扫描类,这个类的作用是扫描我们包下的接口,自动的帮我们为每一个接口创建一个实现类,我们只需要声明接口而不用去创建接口的实现类以及将实现类注册进IoC的过程。

package com.spring.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class MyBatisConfig {
//    创建第三方Bean管理SqlSessionFactory
    @Bean
    public SqlSessionFactoryBean sessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        return sessionFactoryBean;
    }
//    创建第三方Bean管理接口文件映射
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("com.spring.dao");
        return mapperScannerConfigurer;
    }
}

配置完之后,我们就完成了MyBatisConfig类的配置,现在这个类就相当于是我们的application-dao.xml配置文件,那么接下来,我们就要开始搬运application-service.xml文件里面的配置了 在application-service.xml中我们只做了一件事,那就是扫描Service包下面的注解,并将注解对应的类注册进IoC容器中。那么我们首先先把这个做了 在Config包下面创建一个类叫做SpringConfig配置文件,并且在类上添加@Configuration注解将他变成一个配置类。 然后就是实现扫描包的功能,实现在配置文件中扫描包,需要添加@ComponentScan注解,注解中使用字符串配置要扫描的包的全限定路径。 在将application-service.xml文件中的基础配置搬运过来之后,我们还需要做一个动作,就是将两个配置文件整合一下,现在我们还是只是两个分散的配置文件,互相之间没有联系,我们要让他们形成一个完整的系统,就要在SpringConfig中引入MyBatis的两个配置文件,分别是JdbcConfig和MyBatisConfig。 在一个配置类中引入外部的配置文件,我们需要使用到@Import注解。 这个注解的值是一个数组,里面可以存放我们的配置文件的class文件,这样我们就完成了Spring和MyBatis的整合。

package com.spring.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@ComponentScan("com.spring.service")
@Import({MyBatisConfig.class, JdbcConfig.class})
public class SpringConfig {
}

然后我们就开始修改SpringMVC的配置文件的内容,首先我们来看跟SpringMVC有关的内容都有什么,一个SpringMVC的容器配置文件,一个web.xml配置文件。我们首先来看SpringMVC的配置文件。在这个文件中我们做了三件事,首先是包扫描,扫描controller包下面的Bean并将他们注册到IoC容器中。以及配置了一个注解驱动。 我们首先创建一个配置类,叫做SpringMVCConfig文件,然后开始将我们刚才说到的两个步骤搬运到我们的配置类中。 首先是转换配置类的注解是@Configuration,以及包扫描的注解是@ComponentScan,那么注解驱动器怎么配置呢?在SpringMVC的注解驱动的配置需要添加@EnableWebMvc注解去完成这个注解只需要存在就可以了,不需要有任何的值传入。 这样我们之前的SpringMVC的配置文件中的内容就已经全部转移到配置类中了。 

package com.spring.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@ComponentScan("com.spring.controller")
@EnableWebMvc
public class springMVCConfig {

}

然后我们再来看web.xml文件,在这个文件中,我们主要就是配置了一个前端控制器,并且完成了一些初始化的操作,那么我们的Spring就提供了一个抽象类去完成这一系列的动作,既可以完成前端控制器的配置,还能完成我们两个容器,也就是Spring容器和SpringMVC子容器的容器初始化的动作。 任何继承AbstractAnnotationConfigDispatcherServletInitializer的类都会在项目启动的时候自动配置DispatchServlet、初始化SpringMVC容器和Spring容器 这是Spring官网的原话,也就是我们只需要创建一个类去继承他的AbstractAnnotationConfigDispatcherServletInitializer类,就可以完成上述的三个动作。 那么我们现在就在config包下面创建一个类叫做ServletContainersInitConfig,这个类去继承AbstractAnnotationConfigDispatcherServletInitializer。 可以看到,我们在继承这个类之后,他会提示我们需要重写三个方法,那么这三个方法就是对应我们刚才说的三个动作,我么现在开始简单介绍一个这三个方法对应的功能

  • getRootConfigClasses:将Spring配置类的信息加载到Spring容器中
  • getServletConfigClasses:将SpringMVC配置类的信息加载到SpringMVC容器中
  • getServletMappings:可以指定DispatchServlet的拦截路径,一般就是“/”这个值,拦截所有就可以了 
package com.spring.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletContainersInitConfig extends
        AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

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

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

至此我们就完成了基于注解的SSM的整合,在整个的过程中,我们要明确的认识配置类和配置文件的关系,只要搞清楚了注解和配置之间的关系,我们对于两个模式之间的转化就会非常的得心应手

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值