Spring进阶

    xiaoxiao2021-04-11  32

    一、背景

           使用Spring+MyBatis做了个登录的小例子,对Spring的框架又有了深入的了解,在做的过程中,更感觉Spring像是一个容器,帮助我们管理很多的东西,包括MyBatis在内,它是怎么做到如此强大的功能呢?在此记录一下

    二、过程

          1.Spring的核心Beans问题

           使用Spring框架后,那么我们的程序都会被Spring管理起来,而且一旦管理起来后将会永久的活在Spring中,由于Spring是在项目创建最开始创建的,所以没有被Spring管理起来的内容是不会被Spring识别的,也就不能和Spring一起使用。

           首先需要看一下在web.xml中的配置

    <!--spring监听ApplicationContext的载入--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>        在做的过程中发现这句话可有可无,项目都能正常运行,但是Spring怎么会干这么愚蠢的事情呢...配置一个可有可无的东西,然后查资料发现这句话确实用来启动Spring的核心的,如果在不写这句话时候系统会创建默认的Spring,而且默认的和我们手动创建的Spring核心有一定的区别,下面来上一张图look一下....

                                       

            区别如下:

            ①.手动创建的与外部有明显的界限,默认创建的没有界限

            ②.以Spring为框架的项目都是依托于核心Beans的,那么Beans会在最开始的时候被创建,如果与外界有明显的界限那么在外部创建的bean内容Spring的核心beans是不知道,所以不能被Spring管理起来,但是外部的bean是可以访问Spring的核心bean的

            ③.如果我们在默认的Spring核心中创建bean时,这个内外是可以互相访问的,因为他们并没有明显的界限

            ④.其他项目调用我们的Spring核心Bean会出问题(暂时还没做实验来验证...)

           2.Spring+MyBatis

             既然Spring承担项目的容器的作用,那么我们所有的东西都要放在Spring中才能行的通,MyBatis也不例外,其实使用起来也不难,无非是把mybatis自己的配置,全部都让Spring托管起来,直接上配置

         

    <!--spring管理数据库的连接--> <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="url" value = "jdbc:mysql://localhost:3306/user"/> <property name="username" value = "root"/> <property name="password" value="root"/> </bean> <!--声明事务管理数据库--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!--配置sqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--SqlSessionFactory注入数据库连接池--> <property name="dataSource" ref="dataSource"/> <!--指定mybatis的mapper文件--> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!--扫描所有的接口,并通过动态代理生成其实现类--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.huimin.dao.interfaces"/> <property name="sqlSessionFactoryBeanName" value ="sqlSessionFactory"/> </bean>       3.动态代理

           在使用mybatis的时候会发现,我们只是在项目中声明了接口,但是并没有写具体的实现怎么就可以执行sql语句了呢,这里是用到了代理,这个思想也是来源于面向对象的多态,父类引用指向子类对象,动态帮我们生成各个实现类(反射)

           可以通过注解:@Autowired    和   @Resource(”“),这两个作用一样,但是用起来有一点点小区别

          @Autowired   下边直接指定接口就行

          @Resource   带有参数,需要我们在使用的时候指定这个bean的name也就是方法名,这个会更准确

     三、小结

           关于Spring+MyBatis有了宏观的把控,知道大概怎么用了,接下来就是上手做项目,边做边学发现Spring的精髓...

    转载请注明原文地址: https://ju.6miu.com/read-666425.html

    最新回复(0)