Spring学习速成

Spring分成四部分
IoC基础容器
AOP面向切面编程
Spring整合Web环境
Web层解决方案-Spring MVC

三个思想
IoC - Inversion of Control
DI - Dependency Injection
AOP - Aspect Oriented Programming


image.png

Spring - 一个轻量级的开源Java开发应用框架


image.png
image.png

在pom.xml中引入spring-context,Maven会自动导入Beans,core和SpEL(Spring表达式)

BeanFactory - IoC


image.png

代码实现(使用IDEA):

  1. 创建项目,选择Maven


    image.png
  2. 修改pom.xml,添加依赖spring-context,刷新Maven图标


    image.png
  3. 创建两个个默认的接口和对应的接口文件


    image.png

    小技巧:通过菜单Copy Reference可以拷贝完整路径的类名


    image.png
  4. 在resource目录下创建beans.xml配置文件,并添加第一个bean的定义


    image.png

    image.png
  5. 在Main启动类添加以下代码,并运行程序。可以看到工厂自动创建的bean被打印出来了


    image.png

    小技巧:new创建的对象类和变量名可以通过.var自动生成


    image.png

BeanFactory - DI


image.png

image.png

image.png

ApplicationContext - Spring的容器


image.png

BeanFactory和ApplicationContext的关系和区别
在Debug环境下能看到Context实例下的BeanFactory创建的多个Bean,并存放在singletonObjects的HashMap里


image.png

继承关系


image.png
image.png

Bean配置详解


image.png

id - 可选,beanFactory下的singletonObjects map中的key,没设置也没name的时候,类全路径名作为key

name - 作为别名,用逗号分隔多个name,beanFactory下的aliasMap map中会出现,没设置id的时候,第一个name作为key,其他作为alias

scope - 默认singeton,也可以是prototype,不会默认创建bean,每次getBean都会生成一次,而且bean不会加入singletonObjects中。在单纯spring-context模式下只有两个选项,如果加入spring-mvc,会多session和request两个选项

lazy-init - 默认false,对beanFactory无效

init-method - 先执行完整的bean创建,例如包括通过property初始化;如果类加上
InitializingBean,则依次执行;init-method最后执行

destroy-method - 容器关闭,bean销毁前调用


image.png

两种构造bean方法,构造函数方法,工厂方法
构造方法:分为有参和无参;如果有参,用子标签constructor-arg,这个子标签不仅仅构造函数用到,工厂方法创建时也会用到


image.png

工厂方法:分为静态工厂,实例工厂,通过factoryBean规范来延迟实例化bean,主要用于第三方库,不是自己的源代码

静态工厂方式


image.png

实例工厂方式


image.png

factoryBean方式
通过实现FactoryBean接口类,Bean会延迟创建


image.png

创建出来的Bean会存放在factoryBeanObjectCache里,SingletonObjects下只有factoryBean


image.png

依赖注入的数据类型
bean的set方法,构造bean的方法
依赖注入的数据类型:普通属性(value传值),对象(ref传值),集合包括List,Map,Properties

List方式
image.png
image.png

数据类型Set和List类似

Properties和Map数据类型的注入


image.png

image.png

image.png

自动装配,参数byName,byType


image.png

根据Profile生成Bean

  1. 通过代码设置Profile
  2. 通过命令行设置-Dspring.profiles.active=test


    image.png

可以多个XML配置文件,由一个主的XML引入


image.png

Alias标签同name,维护在aliasMap中

自定义命名空间标签的使用

获取bean的三种方法

  1. bean名字
  2. 类名字
  3. bean名字+类名字 - 结果不用强转


    image.png

非自定义的Bean引入

  1. 直接通过Class引入,以Druid为例


    image.png
  2. 通过FactoryBean的静态构造方法,以jdbc的connection为例


    image.png

持续更新中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容