spring 和xml说再见(さようなら)

看完我的这篇文章就可以和spring配置文件说さようなら了

日语小知识

这里给大家科普一下,大约7成的人都不会使用   「さようなら」这个短语

理由是            「さようなら」会给人一种“永别”的感觉

所以对于现在的日本人来说  「さようなら=永别」

这样的语感是确实存在的,所以さようなら这个词要少用哦

下面进入正题

spring注解有不懂的可以去看我的这一篇文章:https://www.cnblogs.com/xuewen1999/p/14007390.html,基本的注解都说有讲解

开始搬家

spring原始配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!--加载perperties配置文件的信息-->
    <context:component-scan base-package="com.baidu.service" />
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--加载druid资源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!--spring整合mybatis后控制的创建连接用的对象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--mybatis的returnType  起别名-->
        <property name="typeAliasesPackage" value="com.baidu.domain"/>
    </bean>

    <!--加载mybatis映射配置的扫描,将其作为spring的bean进行管理-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="basePackage" value="com.baidu.dao"/>
    </bean>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

下面开始搬家,我们需要一个SpringConfig类,这个类就相当与我们的applicationContext.xml文件了

@Configuration
@ComponentScan({"com.baidu.service"})
@Import({DataSourceConfig.class, MybatisConfig.class})
public class SpringConfig {
}

我将jdbc的DataSource的配置和Mybatis的配置分别写在两个文件中,这样以便于我们开发和维护

相信看这个类的注解名称就可以看出,我们所需要搬家的第一行

<context:component-scan base-package="com.baidu.service" />

就可以转化为

@ComponentScan({"com.baidu.service"})

下面开始一点一点搬

dataSource搬家

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

=>

@Bean("dataSource")public DataSource  getDataSource(){    DruidDataSource ds = new DruidDataSource();    ds.setUsername(username);    ds.setPassword(password);    ds.setUrl(url);    ds.setDriverClassName(driver);    return ds;}

jdbc配置文件搬家

<context:property-placeholder location="classpath:jdbc.properties"/>

  => @PropertySource("classpath:jdbc.properties")
下面我们来将properties文件中的属性填充到我们的DataSources中吧

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

非引用类型属性注入我们用Value注解

这样我们的DataSourceConfig类的编写就基本完成了

import javax.sql.DataSource;
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfig {
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.driver}")
    private String driver;

    @Bean("dataSource")
    public DataSource  getDataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setUsername(username);
        ds.setPassword(password);
        ds.setUrl(url);
        ds.setDriverClassName(driver);
        return ds;
    }
}

看完上面的部分应该对xml转化为注解的基本操作,根据我下面的提示应该可以自己尝试编写MyBatisConfig的java类了,

提示:

<property name="dataSource" ref="dataSource"/>

如果需要注入的属性有ref,我们需要在@Bean的方法里面加入参数,参数前面还要AutoWriter注解,

@Bean
public SqlSessionFactoryBean getSqlSessionBean(@Autowired DataSource dataSource){
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    bean.setTypeAliasesPackage("com.baidu.domain");
    return bean;
}

提示就到这里了,先尝试编写再和我编写的有什么不同吧

<!--spring整合mybatis后控制的创建连接用的对象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--mybatis的returnType  起别名-->
        <property name="typeAliasesPackage" value="com.baidu.domain"/>
    </bean>

    <!--加载mybatis映射配置的扫描,将其作为spring的bean进行管理-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="basePackage" value="com.baidu.dao"/>
    </bean>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

上面xml中的配置 => MybatisConfig.java

import javax.sql.DataSource;
public class MybatisConfig {
    @Bean
    public SqlSessionFactoryBean getSqlSessionBean(@Autowired DataSource dataSource){
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setTypeAliasesPackage("com.baidu.domain");
        return bean;
    }
    @Bean
    public MapperScannerConfigurer getMapperScannerConfigurer() {
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.baidu.dao");
        msc.setSqlSessionFactoryBeanName("getSqlSessionBean");
        return msc;
    }

    @Bean
    public DataSourceTransactionManager getDataSourceTransactionManager(@Autowired DataSource dataSource){
        DataSourceTransactionManager dtm = new DataSourceTransactionManager();
        dtm.setDataSource(dataSource);
        return dtm;
    }
}

下面就可以进行测试了,但是如果我们还用原来的ClassPathXmlApplicationContext肯定是不行的,

我们用这个AnnotationConfigApplicationContext就可以让我们之前写的代码跑起来了

public class App {
    public static void main(String[] args) {
        ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
        AccountService bean = ac.getBean(AccountService.class);
        System.out.println(bean.findAll());
    }
}

成功打印

img

这里Serice中的源码就不贴上了,但是可以去我的gitee上下载,里面加入了一些简单的springmvc的配置

源码源码在哪里

https://gitee.com/qq_connect_mikou/spring-study

posted @ 2020-11-19 19:24  xuewenのblog  阅读(177)  评论(0编辑  收藏  举报