【JavaEE】NoteSet
1、Spring的概念和优点
①. Spring是一个轻量级的IOC和AOP容器框架
②. Spring是非侵入式的,基于Spring开发的应用一般不依赖于Spring的类
③. Spring是个容器,包含并且管理应用对象的生命周期和配置。
④. Spring提供对事务的管理
⑤. Spring对主流的框架提供了很好的集成支持。
2、Spring中的IoC和DI思想
IoC(Inversion of Control 控制反转):是一种面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度。其基本思想是:借助于“第三方”实现具有依赖关系的对象之间的解耦。
DI(Dependence Injection 依赖注入):将实例变量传入到一个对象中去(Dependency injection means giving an object its instance variables)。
控制反转是一种思想,依赖注入是一种设计模式,IoC框架使用依赖注入作为实现控制反转的方式。
3、 ApplicationContext容器的使用
Application Context 是 spring 中较高级的容器,它可以加载配置文件中定义的 bean,
将所有的 bean 集中在一起,当有请求的时候分配 bean。
这个容器在 org.springframework.context.ApplicationContext interface 接口中定义。
4、属性setter方法注入的实现
利用Spring配置文件applicationcontext.xml配置bean,并且setter参数注入 JDBCDataSource的连接参数,这样Spring在创建JDBCDataSource对象以后就会自动化的调用setter方法注入数据库连接参数。
5、Bean的常用属性及其子元素
spring框架中主要有四种标签bean、alias、import、beans,其中bean标签是其他标签的基础。
7、bean标签的属性
1)scope:用来配置spring bean的作用域
2)singleton:表示bean为单例的
3)abstract:设置为true,将该bean仅仅作为模板使用,应用程序上下文不会试图预先初始化它
4)lazy-init:设为true,延迟加载,该bean不会在ApplicationContext启动时提前被实例化,而是第一次向容器通过getBean索取bean时实例化
注:只对singleton的bean起作用
5)autowire:自动装配
6)dependency-check:依赖检查
7)depends-on:表示一个bean的实例化依靠另一个bean先实例化
8)autowire-candidate:设为false,容器在查找自动装配对象时,将不考虑该bean,即它不会被考虑作为其他bean自动装配的候选者,但是该bean本身可以使用自动装配来注入其他bean
9)primary:该bean优先被注入
10)init-method:初始化bean时调用的方法
11)destory-method:容器销毁之前所调用的方法
12)factory-method:当调用factory-method所指向的方法时,才开始实例化bean
13)factory-bean:调用静态工厂方法的方式创建bean
8、bean的子元素
1)meta:元数据,当需要使用里面的信息时可以通过key获取
2)lookup-method:获取器注入,是把一个方法声明为返回某种类型的bean但实际要返回的bean是在配置文件里面配置的
3)replaced-method:可以在运行时调用新的方法替换现有的方法,还能动态的更新原有方法的逻辑
4)constructor-arg:对bean自动寻找对应的构造函数,并在初始化的时候将设置的参数传入进去
5)property:基本数据类型赋值
6)qualifier:通过Qualifier指定注入bean的名称
9、实例化Bean的三种方式
1)、使用类构造器实例化;(默认无参数,一般使用这种方式)
2)、使用静态工厂方法实例化(简单工厂模式);
3)、使用实例化工厂实例化(工厂方法模式)。
每种实例化方法的xml配置是不同的。
10、Bean的作用域和生命周期
在Bean容器启动会读取bean的xml配置文件,然后将xml中每个bean元素分别转换成BeanDefinition对象。在BeanDefinition对象中有scope 属性,就是它控制着bean的作用域。
Spring框架支持5种作用域:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0iHYYutF-1615693977484)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10644\wps1.jpg)]
Bean实例生命周期的执行过程如下:
Spring对bean进行实例化,默认bean是单例;
Spring对bean进行依赖注入;
如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法;
如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来;
如果bean实现了ApplicationContextAware接口,它的setApplicationContext()方法将被调用,将应用上下文的引用传入到bean中;
如果bean实现了BeanPostProcessor接口,它的postProcessBeforeInitialization方法将被调用;
如果bean实现了InitializingBean接