Spring是什么
Spring意为春天,Spring生于2002年,由Rod Johnson创作。Spring是一个集众多设计模式(工厂设计模式,代理设计模式,策略设计模式)于一身的开源的,轻量级的项目管理框架。致力于JavaEE轻量级解决方案。
SPring的特点:
(1)方便解耦,简化开发
(2)Aoρ编程支持
(3)方便程序测试
(4)方便和其他框架进行整合
(5)方便进行事务操作
(6)降低API开发难度
IOC容器
什么是IOC?
(1)控制反转,把对象创建和对象之间的调用过程,交给 Spring进行管理
(2)使用IOC目的:为了耦合度降低
(3)做入门案例就是IOC实现
IOC底层原理:
xml解析、工厂模式、反射
-
[IOC过程 ]
IOC(接口)
- IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
- Spring提供IOC容器实现两种方式:(两个接口)
(1) Beanfactory:IOC容器基本实现,是 Spring内部的使用接ロ,不提供开发人员进行使用
* 加载配置文件时不会创建对象,在获取(使用)对象才去创建对象
(2)Application Context: Beanfactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用
* 加载配置文件时就会创建配置文件对象
IOC操作bean管理
基于XML创建对象
在Spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创建
创建对象时,默认执行无参构造方法完成对象创建
基于XML方式注入属性
1. DI:依赖注入,就是注入属性(需在创建对象基础之上 )
a. 使用set方法注入
i. 创建类,定义属性和对应的set方法
ii. 在spring配置文件配置对象创建,配置属性注入
b. 使用有参构造进行注入
i. 创建一个类,定义属性,创建属性对象有参构造方法
ii. 在spring配置文件中进行配置
c. P名称空间注入
i. 使用p名称空间注入,可以简化基于xml配置方式
基于XML注入其他类型属性
1. 字面量:
a. null值
<property name="address">
<null/>
</property>
<!--向属性中输入空值-->
b. 属性值包含特殊符号
<property name="address">
<value><![CDATA[<<宁夏>>]]></value>
</property>
2. 注入属性
a. 外部bean
i. 创建两个类service类和dao类
ii. 在service调用dao里面的方法
iii. 在spring配置文件中进行配置
b. 内部bean和级联赋值
i. 一对多关系:部门和员工
一个部门有多个员工,一个员工属于一个部门
部门是一,员工是多
ii. 在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示
3. 级联赋值
a. 第一种写法:
<bean id = "emp" class = "com.yun.spring5.bean.Emp">
<property name = "ename" value = "Stark"></property>
<property name = "gender" value = "男"></property>
<property name = "dept" value = "dept"></property>
</bean>
<bean id = "dept" class = "com.yun.spring5.bean.Dept">
<property name = "dname" value = "测试"></property>
</bean>
</beans>
b. 第二种写法:(生成dept的get方法)
<bean id="emp" class="com.yun.spring5.bean.Emp">
<property name="ename" value="Stark"></property>
<property name="gender" value="女"></property>
<property name="dept" ref="dept"></property>
<property name="dept.dname" value="研发部"></property>
</bean>
<bean id="dept" class="com.yun.spring.bean.Dept">
<property name="dname" value="后勤部"></property>
</bean>
</beans>
XML注入属性
1. 注入数组类型属性
a. 创建类,定义数组,list,map,set类型属性,生成对应set方法
b. 在spring配置文件中配置
2. 注入List集合类型属性
3. 注入Map类集合属性
注意:在集合中设置对象类型值
IOC操作bean管理(Factory Bean)
-
Spring有两种类型bean,一种普通bean,另外一种工厂bean(FactoryBean)
-
普通bean:在spring配置文件中,定义bean类型就是返回类型
-
工厂bean:在Spring配置文件中定义的bean类型可以和返回的类型不一样
a. 创建一个类,让这个类作为工厂bean,实现接口FactoryBean b. 实现接口里的方法,在实现的方法中定义返回的bean类型
IOC操作Bean管理(bean作用域)
-
在spring里,设置创建bean实例是单实例还是多实例
-
在spring里,默认情况下,bean是一个单实例对象
-
如何设置单实例还是多实例
a. 在spring配置文件bean标签有属性(scope)用于设置单实例还是多实例 b. scope属性值(scope有多个值,常用的有两个) i. singleton(默认值) ii. prototype(表示是多实例对象) iii. Request iv. session c. singleton与prototype的区别 i. singleton是单实例,prototype是多实例 ii. 设置scope值是singleton时候,加载spring配置文件时会创建单实例对象 iii. 设置scope值是prototype时,不是在加载spring配置文件时创建对象,在调用getBean方法时创建多实例对象
IOC操作Bean管理(bean生命周期)
-
生命周期
a. 从对象的创建到对象销毁的过程
-
bean的生命周期
a. 通过构造器创建bean实例(无参数构造) b. 为bean的属性设置值和对其他bean的引用(调用set方法) c. 把bean实例传递bean后置处理器的方法 d. 调用bean初始化的方法(需要进行配置初始化的方法) e. 把bean实例传递bean后置处理器的方法 postProcessAfterInitialization f. bean可以使用了(对象获取到了) g. 当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁方法)
-
演示bean的生命周期
-
演示后置处理器效果
a. 创建类,实现一个接口 BeanPostProcessor,创建后置处理器
Spring针对Bean管理中创建对象提供注解
1. @Component
2. @Service
3. @Controller
4. @Repository
四个注解功能是一样的,都可以用来创建bean实例
基于注解方式实现对象创建
- 引入依赖
- 开启组件扫描
- 创建类,在类上面添加创建对象注解
基于注解方式实现属性注入
-
@AutoWired:根据属性类型进行自动装配
a. 创建service和dao对象,在类上添加创建对象注解
-
@Qualifier:根据属性名称进行注入
这个@ Qualifier注解的使用,和上面@ Autowired一起使用
名词注释:
轻量级解决方案:提供一个简单的,统一的,高效的方式构造整个应用,并且可以将单层框架以最佳的组合撮合在一起建立一个连贯的体系。
- bean标签属性:
- id属性:唯一标识
- class属性:创建对象所在类的全路径
- name属性:使用中可加特殊符号
纯注解开发是后期开发中最常用的方式