Spring进阶

一、背景

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

二、过程

      1.Spring的核心Beans问题

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

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

    
    
        org.springframework.web.context.ContextLoaderListener
    

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

                                    Spring进阶_第1张图片

        区别如下:

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

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

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

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

       2.Spring+MyBatis

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

     


    
        
        
        
        
    
    
    
        
    
    
    
        
        
        
        
    
    
    
        
        
    
       3.动态代理

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

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

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

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

 三、小结

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






你可能感兴趣的:(java)