zoukankan      html  css  js  c++  java
  • 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

    如果觉得这篇文章有帮助的话,希望可以在右边点个赞,关注一下下也是可以的
  • 相关阅读:
    当今的架构师和架构
    外企2
    测试驱动开发TDD系列
    在IIS中部署WCF中遇到的问题
    设计高可用和高负载的网站系统(转载)
    IIS中部署WCF
    无限级分类1
    读《WCF技术剖析》(卷一)
    无限极列表2
    TCP/IP、HTTP、WEBSERVICE、SOAP、ICE都使用后才有感慨
  • 原文地址:https://www.cnblogs.com/xuewen1999/p/14007431.html
Copyright © 2011-2022 走看看