什么是IOC
-
IOC:Inversion of Control(控制反转)
-
下载Spring的开发包。
-
解压Spring的开发包
-
-
docs:Spring的开发规范和API
-
libs:Spring的开发的jar包和源码
-
schema:Spring的配置文件的约束
创建web项目,引入jar包
问题:
工厂模式
将实现类交给Spring管理
在spring的解压路径下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.xml
编写测试类
IOC和DI
-
IOC:控制反转,将对象的创建权反转给了Spring。
-
DI:依赖注入,前提必须有IOC环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。
-
面向对象的时候
- 依赖
class A{ } class B{ public void xxx(A a){ } }
- 继承
class A{ } class B extends A{ }
-
聚合
has a
Spring的工厂类
-
BeanFactory
Spring的结构图
-
老版本的工厂类
-
BeanFactory: 调用getBean的时候,才会生成类的实例。
-
ApplicationContext
- 新版本的工厂类
- 加载配置文件的时候,就会将Spring管理的类都实例化。
- ApplicationContext有两个实现类
- ClassPathXmlApplicationContext:加载类路径下的配置文件
- FileSystemXmlApplicationContext:加载文件系统下的配置文件
-
Bean标签的id和name的配置
- id: 使用了约束中的唯一约束,里面不能出现特殊字符的。
- name:没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的)
-
Bean的生命周期的配置
-
init-method : Bean被初始化的时候执行的方法
-
destroy-method :Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)
Bean的作用范围的配置
- scope :Bean的作用范围
- singleton :默认Spring会采用单例模式创建对象
- prototype :多例模式(Struts2和Spring整合的时候一定会用到)
- request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中
- session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中
- globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相当于session。
Spring的属性注入
使用p名称空间
SPEL的属性注入(Spring3.0以后)
SPEL:Spring Expression Language:Spring的表达式语言。
- 语法:
- #{SPEL}
集合类型的属性注入
<!-- Spring的集合属性的注入 -->
<!-- 注入数组类型 -->
<bean id="collectionBean" class="com.nice.spring.demo4.CollectionBean">
<!-- 数组类型 -->
<property name="arrs">
<list>
<value>宁海博</value>
<value>吴宇桐</value>
<value>nice</value>
<value>张三</value>
</list>
</property>
<!-- 注入list集合 -->
<property name="list">
<list>
<value>smile</value>
<value>jackson</value>
<value>james</value>
<value>django</value>
</list>
</property>
<!-- 注入set集合 -->
<property name="set">
<set>
<value>haha</value>
<value>hehe</value>
<value>xixi</value>
<value>heihei</value>
</set>
</property>
<!-- 注入Map集合 -->
<property name="map">
<map>
<entry key="fruit1" value="苹果"/>
<entry key="fruit2" value="橘子"/>
<entry key="fruit3" value="香蕉"/>
</map>
</property>