Spring框架学习笔记(一)-- 基础

1.什么是Spring框架

Spring是一种容器框架,是用于配置各种Bean,并维护各种Bean之间关系的框架。

2.使用Spring框架的优势

  1. 它是一种基于POJO的轻量级和最小侵入性框架。Spring框架竭力避免因自身的API而弄乱你的应用代码,做到最小侵入性。不会强迫你实现Spring规范的接口或者继承Spring规范的类, 激发POJO的潜能。
  2. 通过依赖注入和面向接口实现高内聚低耦合。Spring框架就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理。当你修改一个业务时,不需要修改大量你的java代码,而是通过少量的配置实现修改。减少了“牵一发而动全身”的效果。
  3. 基于切面和模板编程,减少代码量,提高代码的复用性。Spring旨在通过模板封装来消除样板式代码,使得实现相似任务时,不会一遍一遍的重复使用相同的代码

3.Spring框架给我们带来了什么

在不使用Spring框架时,是这样操作的:

  1. 创建一个实例对象
  2. Set相关属性
  3. 调用相应的对象方法

在使用Spring框架时,是这样操作的:

  1. 创建一个Spring的Ioc容器对象
  2. 从Ioc容器中获取Bean实例
  3. 调用相应的对象方法

综上所述,Spring框架帮助我们去new对象以及设置相应属性,只要写好Spring的配置文件,让框架帮我们做剩余的工作。

4.使用Spring框架的流程

  1. 引入Spring的开发包(jar包)
  2. 创建Spring的核心文件applicationContext.xml
  3. 配置bean(bean元素的作用:当我们Spring加载的时候,Spring会自动创建一个bean)
  4. 在Test.java中使用Spring框架

5.使用上下文容器和BeanFactory

如果使用上下文容器,则配置的bean如果是singlton,不管使不使用,都要被实例化(好处:可以预先加载;坏处:耗内存)

如果使用BeanFactory,则当你实例化该对象时,配置的bean不会马上被实例化,当你使用的时候,才会被实例化(好处:节省内存;坏处:速度慢)

经验:一般情况下,使用上下文容器ApplicationContext即可。

6.三种获取ApplicationContext对象引用方法

classPathXmlApplicationContext    -->通过类路径

FilesystemXmlApplicationContext  -->通过文件路径

XmlWebApplicationContext           -->通过web系统

7.bean的生命周期

  1. 实例化(但我们加载xml文件时),把我们的bean实例化到内存
  2. 调用set方法设置属性
  3. 如果你实现了bean名字关注接口,则可以通过setBeanName获取id号
  4. 如果你实现了bean工厂关注接口,则可以获取BeanFactory
  5. 如果你实现了ApplicationContextAware接口,则调用方法
  6. 如果bean和一个后置处理器关联,则会自动调用ObjectpostProcessBeforeInitialization方法
  7. 如果你实现了InitializingBean接口,则会调用afterPropertisSet
  8. 如果自己在<bean init-method = 'init'/>,则可以在bean定义自己的初始化方法
  9. 如果bean和一个后置处理器关联,则会自动调用ObjectpostProcessAfterInitialization方法
  10. 使用我们的bean
  11. 容器关闭
  12. 可以通过实现DisposableBean接口来调用方法destroy
  13. 可以在<bean destroy-methon = 'fun1'/>调用定制的销毁方法

总结:一般不会全部用到,一般会是:1,2,6,10,9,11

8.Spring自动装配有四种类型

  • byName:在Ioc容器中寻找与Bean中属性名相同的id对应的Bean,如果找不到相符合的Bean,则该属性没有装配成功
  • byType:在Ioc容器中寻找与Bean相同类型的Bean,如果找不到相符合的Bean,则没有装配成功;如果找到多个相符合的Bean,则抛出异常
  • constructor:在Ioc容器中寻找与Bean中构造函数参数一致的一个或多个Bean,如果存在不确定的Bean,则会抛出异常
  • autodetect:自动模式,首先会尝试使用constructor来自动装配,然后使用byType方式

猜你喜欢

转载自blog.csdn.net/sihailongwang/article/details/79570013