spring第一天 spring概念和IOC入门

第一天 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方法)
发布了135 篇原创文章 · 获赞 5 · 访问量 7086

猜你喜欢

转载自blog.csdn.net/qq_27921205/article/details/104572739