文章目录
第一天 spring概念和IOC入门
1.Spring概念
1 spring是开源的轻量级框架
2 spring核心主要两部分:
(1)aop:面向切面编程,扩展功能不是修改源代码实现
(2)ioc:控制反转,
- 比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象
- 把对象的创建不是通过new方式实现,而是交给spring配置创建类对象
3 spring是一站式框架
(1)spring在javaee三层结构中,每一层都提供不同的解决技术
- web层:springMVC
- service层:spring的ioc
- dao层:spring的jdbcTemplate
4 spring版本
(1)hibernate5.x
(2)spring4.x
2. Spring的ioc操作
1.把对象的创建工作交给spring进行管理
2.ioc操作两部分
(1)ioc的配置文件方式
(2)ioc的注解方式
3.IOC的底层原理
XML配置文件 、dom4j解析XML、 工厂设计模式 、反射技术
原理:为了减少修改类定义之后修改调用代码过多,尝试不适用new对象。而是通过修改配置文件,使用dom4j解析XML配置文件根据id获取class路径,再使用反射创建类的对象。
4. IOC入门案例
1.导包
2.创建类
3.创建配置文件,建议是applicationContext.xml
引入schema约束(例如beans的约束:)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
</beans>
如果在XML catalog中配置了相关的约束,就可以在配置时出现提示。
3. spring的bean管理
3.1 实例化的方式
- 使用类的无参数的构造函数(常用):如果只有有参的构造函数那么会报错。
- 使用静态工厂:创建工厂类的静态方法,用于返回需要类的对象(直接使用工厂类调用静态方法)
- 使用实例工厂:创建工厂类的非静态方法,用于返回需要类的对象(需要先创建工厂对象,再调用方法)
3.2 Bean标签的常用属性
- id:名称,任意取,不能包含特殊符号,用于从Bean中获取对象
- name:功能和id一样,但是可以包含特殊符号(遗留符号,一般不用)
- class:创建对象所在类的全路径
- scope:范围
– singleton:默认值,单例(一个对象)
– prototype:多例(多个对象)
– request:创建对象把对象放到request域里面
– session:创建对象把对象放到session域里面
– globalSession:创建对象把对象放到globalSession里面
3.3 属性注入介绍
1 创建对象的时候,向类里面属性里面设置值
2 属性注入的方式介绍
(1)使用set方法注入(最常用)
<property><property/>
(2)使用有参数构造函数注入
<constructor-arg><constructor-arg />
(3)使用接口注入(spring不支持)
3.4 注入对象类型的属性(重点)
为了类中使用其他对象,可以直接注入对象,使用ref=" "
而不是是value=" "
3.5 注入复杂类型属性
- 数组
- list集合
- map集合
- properties类型
<!-- 注入复杂类型属性值 -->
<bean id="person" class="cn.itcast.property.Person">
<!-- 数组 -->
<property name="arrs">
<list>
<value>小王</value>
<value>小马</value>
<value>小宋</value>
</list>
</property>
<!-- list -->
<property name="list">
<list>
<value>小奥</value>
<value>小金</value>
<value>小普</value>
</list>
</property>
<!-- map -->
<property name="map">
<map>
<entry key="aa" value="lucy"></entry>
<entry key="bb" value="mary"></entry>
<entry key="cc" value="tom"></entry>
</map>
</property>
<!-- properties -->
<property name="properties">
<props>
<prop key="driverclass">com.mysql.jdbc.Driver</prop>
<prop key="username">root</prop>
</props>
</property>
</bean>
4. IOC和DI区别
(1)IOC: 控制反转,把对象创建交给spring进行配置
(2)DI: 依赖注入,向类里面的属性中设置值
(3)关系:依赖注入不能单独存在,需要在ioc基础之上完成操作
5.Spring整合web项目原理
1 加载spring核心配置文件,
上述代码使用new 对象,功能可以实现,效率很低
2 实现思想:把加载配置文件和创建对象过程,在服务器启动时候完成
3 实现原理
(1)ServletContext对象
(2)监听器
(3)具体使用:
- 在服务器启动时候,为每个项目创建一个ServletContext对象
- 在ServletContext对象创建时候,使用监听器可以具体到ServletContext对象在什么时候创建
- 使用监听器监听到ServletContext对象创建时候,
– 加载spring配置文件,把配置文件配置对象创建
– 把创建出来的对象放到ServletContext域对象里面(setAttribute方法) - 获取对象时候,到ServletContext域得到 (getAttribute方法)