ioc基本概念(控制反转):把对象的创建和对象之间的调用过程交给Spring进行管理
目的:为了降低耦合度
底层:(1)xml解析、工厂模式、反射
目的:进一步解耦
工厂模式:
1、IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
2、Spring提供IOC容器的两种方式:
(1)BeanFactory:IOC容器的最基本的实现,Spring内部的使用接口,一般不提供开发人员进行使用(加载配置文件的时候并不会创建对象,在获取对象或者使用对象的时候采取创建)1加载2创建
(2)ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用(加载配置文件的时候就对对象进行创建)
(0)Bean管理指的是两个操作
(1)Spring创建对象
(2)Spring注入属性
①基于xml方式创建对象()
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="wanger" class="com.luis.dto.Person">bean>
<bean id="zhangsan" class="com.luis.dto.Person" init-method="init" destroy-method="over">bean>
<bean id="lisi" class="com.luis.dto.Person" scope="prototype">bean>
<bean id="lazy" class="com.luis.dto.Person" lazy-init="true"/>beans>
<bean name="address" class="com.luis.dto.Address">bean>
beans>
a、在spring配置文件中,使用bean标签,标签里添加对应的属性,就可以实现对象的创建
b、在bean标签中很多属性,介绍常用的属性
id属性:唯一标识
class属性:类全路径(包类路径)
name属性:与id属性相似(基本不用)
c、创建对象是默认执行的是无参构造方法完成对象的创建
②基于xml方式注入属性
a、DI:依赖注入,就是注入属性
a、创建类,定义属性,创建属性对应的有参构造方法
b、在spring配置文件配置
c、p名称空间注入(了解)
(1)使用p名称空间注入,可以简化基于xml配置的方式
第一步需添加p命名空间在配置文件中
第二步进行属性注入,在bean标签里进行操作
1、字面量(对象属性初始设置的默认值)
(1)null值(使用null标签)
(2)属性值包含特殊符号
(1)创建两个类service类和dao类
(2)在service调用dao里面的方法
(3)在spring配置文件中进行配置
(1)一对多关系:部门和员工
一个部门里有多个员工,一个员工只属于一个部门
(2)在实体类之间表示一对多的关系
部门类:
员工类:员工表示所属部门,使用对象类型属性进行表示
(第一种方法)
第二种方法)(注意:要先写dept属性的get方法)
1、注入数组类型属性
2、注入List集合类型属性
3、注入Map集合类型属性
4、注入Set集合类型属性
细节问题:
细节一:在集合属性里设置值为对象如何实现
细节二:把集合注入部分提取出来
(1)在spring配置文件引入名称空间util
(2)提取list集合类型属性注入
1、spring有两种类型的bean,一种就是普通的bean,另外一种就是工厂bean(FactoryBean)
2、普通bean:在spring配置文件中定义的类型就是返回类型
3、工厂bean:在配置文件定义bean类型可以与返回的类型不一样
第一步:创建类,让这个类作为工厂bean,实现接口FactoryBean
第二步:实现接口里面的方法,在实现方法中定义返回的bean类型
1、在Spring里面,设置创建bean实例是单实例还是多实例
2、在Spring里面,bean默认创建的是单实例
3、如何设置是单实例还是多实例
(1)在spring配置文件bean标签里有属性(scop)用于设置单实例还是多实例
(2)scope属性值
第一个值,singleton,表示单实例对象
第二个值,prototype,表示是多实例对象
(3)singleton和pototype区别
第一 singleton 单实例,prototype 多实例
第二 设值scope值是singleton的时候,加载spring配置文件时候就会创建实例对象
设置scope值是prototype的时候,不是加载spring配置文件时候创建对象,在调用getBean方法时候创建多实例对象。
1、生命周期
(1)从对象的创建到销毁过程
2、bean的生命周期
(1)通过构造器创造bean实例(无参数构造)
(2)为bean的属性设置值和对其他bean的引用(调用set方法)
(3)调用bean的初始化方法(需要进行配置)
(4)bean可以使用了(对象获取到了)
(5)当容器关闭时候,调用bean的销毁方法(需要进行配置销毁的方法)
3、演示bean的生命周期
4、bean的后置处理器,bean的生命周期有七步
(1)通过构造器创造bean实例(无参数构造)
(2)为bean的属性设置值和对其他bean的引用(调用set方法)
(3)把bean实例传递bean后置处理器的方法(postbefor)
(4)调用bean的初始化方法(需要进行配置)
(5)把bean实例传递bean后置处理器的方法
(6)bean可以使用了(对象获取到了)
(5)当容器关闭时候,调用bean的销毁方法(需要进行配置销毁的方法)
5、演示添加后置处理器
(1)创建类、实现接口BeanPostProcessor,创建后置处理器
(2)配置后置处理器
1、什么是自动装配?
(1)根据指定装配规则(属性名或者属性类型),spring自动将匹配的属性值进行注入
2、演示自动装配的过程
(1)创建部门类和员工类,员工类有一个部门属性
(2)配置spring配置文件(注入两 个bean,在员工bean使用autowire标签实现自动装配)
byName根据属性名注入,注入bean的id值和属性值要一致,否则无法注入
byType根据属性类型注入(spring配置文件里不能注入多个相同类型的bean)
1、直接配置数据库信息
(1)配置连接池(德鲁伊)
(2)引入德鲁伊连接池以来jar包
2、引入外部属性文件配置数据库连接池
(1)创建外部属性文件,properties格式文件,写数据库信息
(2)把外部属性文件引入到spring配置文件中
*引入context名称空间
*在spring配置文件使用标签引入外部属性文件
1、什么是注解
(1)注解是代码特殊标记,格式:@注解名称(属性名=属性值,属性名=属性值…)
(2)使用注解,注解作用在类上面,方法上面,属性上面
(3)使用注解的目的:简化xml配置
2、Spring针对Bean管理创建提供的注解
(1)@Conponent 普通组件
(2)@Service
(3)Controller
(4)@Repository @Mapper
*上面的四个注解的功能都是一样的,都可以用来创建bean实例
3、基于注解方式实现对象创建
第一步 引入依赖
第二步开启组件扫描
第三步 创建类,在类上面添加创建对象的注解
4、开启组件扫描细节配置
(1)@AutoWired 根据属性类型进行自动装配
第一步 把service和dao对象创建,在service和dao类创建对象注解
第二步 在service里注入dao对象,在service类添加到类型属性,在属性上面使用
(2)@Qualifier 更具属性的名称进行注入
(3)@Resouce 可以根据类型注入,也可以根据名称进行注入
(4)@Value 注入普通类型属性
6、完全注解