Spring分成四部分
IoC基础容器
AOP面向切面编程
Spring整合Web环境
Web层解决方案-Spring MVC
三个思想
IoC - Inversion of Control
DI - Dependency Injection
AOP - Aspect Oriented Programming
Spring - 一个轻量级的开源Java开发应用框架
在pom.xml中引入spring-context,Maven会自动导入Beans,core和SpEL(Spring表达式)
BeanFactory - IoC
代码实现(使用IDEA):
-
创建项目,选择Maven
-
修改pom.xml,添加依赖spring-context,刷新Maven图标
-
创建两个个默认的接口和对应的接口文件
小技巧:通过菜单Copy Reference可以拷贝完整路径的类名
-
在resource目录下创建beans.xml配置文件,并添加第一个bean的定义
-
在Main启动类添加以下代码,并运行程序。可以看到工厂自动创建的bean被打印出来了
小技巧:new创建的对象类和变量名可以通过.var自动生成
BeanFactory - DI
ApplicationContext - Spring的容器
BeanFactory和ApplicationContext的关系和区别
在Debug环境下能看到Context实例下的BeanFactory创建的多个Bean,并存放在singletonObjects的HashMap里
继承关系
Bean配置详解
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销毁前调用
两种构造bean方法,构造函数方法,工厂方法
构造方法:分为有参和无参;如果有参,用子标签constructor-arg,这个子标签不仅仅构造函数用到,工厂方法创建时也会用到
工厂方法:分为静态工厂,实例工厂,通过factoryBean规范来延迟实例化bean,主要用于第三方库,不是自己的源代码
静态工厂方式
实例工厂方式
factoryBean方式
通过实现FactoryBean接口类,Bean会延迟创建
创建出来的Bean会存放在factoryBeanObjectCache里,SingletonObjects下只有factoryBean
依赖注入的数据类型
bean的set方法,构造bean的方法
依赖注入的数据类型:普通属性(value传值),对象(ref传值),集合包括List,Map,Properties
数据类型Set和List类似
Properties和Map数据类型的注入
自动装配,参数byName,byType
根据Profile生成Bean
- 通过代码设置Profile
-
通过命令行设置-Dspring.profiles.active=test
可以多个XML配置文件,由一个主的XML引入
Alias标签同name,维护在aliasMap中
自定义命名空间标签的使用
获取bean的三种方法
- bean名字
- 类名字
-
bean名字+类名字 - 结果不用强转
非自定义的Bean引入
-
直接通过Class引入,以Druid为例
-
通过FactoryBean的静态构造方法,以jdbc的connection为例
持续更新中