1.对象的生命周期
1.单例模式
*创建容器时,创建对象;容器销毁时,对象销毁;
2.原型模式
*创建容器时,对象不会创建,在每次获取对象时创建对象;
*对象不会随着容器的销毁而销毁;
3.在<bean>标签中的两个属性
*Init-method:指定初始化执行的方法;
*destory-method:指定销毁时执行的方法,只对scope为singleteton的bean有效;
2.oop和aop思想区别:
面向对象:纵向抽取;
AOP:横向抽取;业务场景:提取公共的;
3.Spring整合Mybatis的详解
注:在进行一下操作时,容器中要有DataSource对象.也就需要设置:
1.SqlSessionFactoryBean(Spring中获取SqlSession对象用的):
*这个类在底层实现了FactoryBean接口,也就是利用了标准工厂模式,获取对象.
#标准工厂模式:在我们需要一个对象时,就可以通过实现FactoryBean接口,重写其中的getObject()方法返回想要得到的对象和 getObjectType()方法设置对象的类型.
*源码:
2.MapperScannerConfigurer详解
Bean定义后置处理器的作用:
2.1当我们创建容器时,会先根据配置类,找到所有你需要创建的对象,然后会根据类中的信息,变成Bean定义,然后保存起来(Map集合中).
Bean定义:相当于生产图纸,先准备好图纸,工厂才会自动生产成品.
*spring在我们创建对象之前会先分析我们的对象的信息,如:叫什么\有没有初始化方法等各种信息.这些信息就叫做Bean定义.
2.2然后就会去检查,这些bean定义中是否有实现了BeanFactoryPostProcessor接口的Bean定义.
*如果有,就会先创建它们.优先级会变高.然后,就会执行它们的postProcessBeanDefinitionRegistry方法.
#在这个方法中,我们就可以将一些其他没有进行Bean定义的类,拉到保存bean定义的map集合中.(也就相当于工厂有了这个对象生产图纸,然后就会自动根据图纸创建对象)
2.3然后就会把2.1和2.2中总生成的Bean定义所代表的类的对象创建出来.
2.4所以Bean定义后置处理器就赋予了我们一个能力:就是以编码的形式拉入其他对象,有了对象就可以进行其他操作.
再来看我们获取Mapper对象时的操作:
注意:虽然我们的Mapper包下面全是接口,但是底层会帮我们自动创建实现类,然后去创建对象.(类似于我们之前的动态代理方式获取Mapper层实现类对象的方式)
3.经过以上的步骤我们就可以得到我们需要的,sqlsessionFactory对象(它就可以得到SqlSession对象)、mapper对象,也就可以对数据库进行正常操作了.
4.AOP面向切面编程的底层实现原理---->动态代理实现分析
动态的实现:程序运行中发生的事
1.动态直接生成.java文件,直接在字符串中进行拼接新代码
1.1Java代码本质就是一堆字符串,编写完之后会就是.java文件,所以可以利用IO输出流,将Java格式的字符串输出,就得到了.java文件.
2.直接生成.class文件(class文件的开头都是CA FE BA BE)
动态字节码技术:
凭空造对象:
有了凭空造对象这门技术,并且我们可以让他们执行同一个方法,还能获取到原本方法,我们也就可实现对一个对象进行功能增强.也就是我们AOP的思想.
3.Bean后置处理器:发生在bean定义后置处理器后,spring容器将所有对象都创建好之后,它才会运行BeanPostProcessor.作用就是给你最后改变对象的机会,否则对象就不能在改变了.AOP就是在后置处理方法中完成的.
###AOP的核心作用就是为我们原本的方法增加功能,并且不修改原代码.所以通过动态代理的方式我们就能够凭空创建对象,并且创建出来的额对象,都会执行一个共同的方法,在这个方法中就可以实现增强逻辑,还可以执行原来的逻辑.在bean后置处理器中,他会在对象创建完成后执行,这是我们最后修改对象的时机,所以AOP也就在这一步进行,将对象的逻辑进行改变.
Spring的生命周期: 5.X版本 基于注解形式
1.当我们new 容器的时候,整个周期就开始了;
未完.....