Spring IOC 使用笔记

Spring框架

Spring框架概述
1.Spring 是轻量级的开源JavaEE 框架

2.Spring 可以解决企业应用开发的复杂性

3.Spring 有两个核心部分 IOC 和Aop
IOC: 控制反转 把创建对象过程交给Spring 进行管理
Aop : 面向切面,不修改源代码进行功能增强

4.Spring 特点
1.方便解耦 简化开发
2.Aop 编程的支持
3.方便程序的测试
4.方便和其他框架进行整合
5.方便进行事物操作
6.减低API开发难度

IOC容器

控制反转,把对象创建和对象之间的调用过程,交给spring进行管理
使用ioc的目的 :为耦合度降低

1.IOC底层原理
底层技术 xml解析 工厂模式 , 反射

IOC过程
第一步 xml配置文件,配置创建的对象< bean id="" class ="">< /bean >

第二步 有service类 和dao类 创建工厂类

class UserFactory{
public static UserDao getDao(){
String classvalue =class属性值 //运用xml解析得到值
//通过反射创建对象
Class clazz = Class.forNme(classvalue)
return clazz .newInstance();
}
}

2 IOC接口
IOC思想 基于IOC容器完成 ,IOC容器底层就是对象工厂

2.Spring 提供IOC容器的两种实现方式 : 两个接口

    (1) BeanFactory  IOC容器基本实现 , 是Spring内部使用接口 ,不提供开发人员进行使用 
         特点 :加载配置文件的时候不会创建对象,在使用的时候采取创建对象
    
    
    (2)ApplicationContext : BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人员进行使用 
             特点:加载配置文件的时候就会把在配置文件中给的对象进行创建
       ApplicationContext 的两个实现类  
                                      FileSystemXmlApplicationContext   对应带盘的那个路径
                                      ClasPathXmlApplicationContext      src下的类路径

IOC操作 Bean管理
1.什么是Bean管理
Bean管理的两个操作
(1) Spring创建对象
(2)Spring属性注入

Bean 管理操作两种方式
1.基于xml配置文件方式实现

基于xml创建对象
在这里插入图片描述
在spring 配置文件中,使用bean 标签 标签里面添加对应的属性就可以实现对象的创建

在bean 标签里的属性
id 属性 唯一标识
class 属性 类全路径 (包类路径)
创建对象的时候,默认执行无参构造方法

基于xml方式注入属性
(1) DI : 依赖注入 ,就是注入属性
第一种注入方式 : 通过set方法注入
(1)创建类 定义属性和对应的set方法
(2) < !-- 使用property 完成属性注入 name 属性 类里面属性名称 value 向属性注入的值 – >
在这里插入图片描述

第二种注入方式 : 使用有参构造注入
2.基于注解方式实现
(1)创建类,定义属性 创建属性对应
在这里插入图片描述
在配置文件中配置
在这里插入图片描述

p名称空间注入 (了解)

使用p名称空间注入,可以简化基于xml配置方式

xml注入其他类型属性

1.字面量
(1) null 值
在这里插入图片描述

(2)属性包含特殊符号
在这里插入图片描述

注入属性 – 外部bean
(1)创建两个类service 类和dao类
(2)在service 调用dao里面的方法
(3)在spring 配置文件中进行配置
在这里插入图片描述

注入属性 - 内部bean 和级联赋值
一对多关系 : 部门和员工
一个部门有多个员工 ,一个员工属于一个部门 部门是一 员工是多
2. 在实体类中表示一对多关系 ,员工所属的部门,使用对象类型属性进行表示
在这里插入图片描述
在这里插入图片描述
3.在spring配置文件进行相关配置
在这里插入图片描述
内部bean
注入属性–级联赋值(给属性的属性赋具体的值)
第一种方式
在这里插入图片描述
第二种方式 需要有 属性的get方法
在这里插入图片描述
xml注入集合属性
1.创建类,定义数组 list map set 类型属性 生成set方法
在这里插入图片描述

1注入数组类型属性

在这里插入图片描述

2.注入 List集合属性
在这里插入图片描述

3,注入Map集合类型属性
在这里插入图片描述

4.set
在这里插入图片描述
4.在集合里面设置对象类型值

在这里插入图片描述

5.把集合注入部分提取出来
在这里插入图片描述

(1) 在spring 配置文件中引入名称空间util
在这里插入图片描述
使用util标签完成list 集合注入提取
在这里插入图片描述
在这里插入图片描述

Ioc 操作Bean 管理(FactoryBean)

1.Sping 有两种类型bean,一种是普通bean ,另一种是工厂bean (FactoryBean)(Spring内置的)

2.普通bean:在spring配置文件中 定义的类型就是返回的类型

3.工厂bean,在配置文件定义bean类型可以和返回类型不一样
1. 创建一个类 让这个类作为工厂bean,实现接口FactoryBean
2. 实现接口里面的方法,在实现的方法中定义返回的bean类型

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Bean的作用域

1.在Spring里面可以是设置创建bean实例是单实例还是多实例

2.在Spring里面默认情况下是单实例
在这里插入图片描述

在这里插入图片描述

3 .如何设置单实例还是多实例

(1)在spring配置文件bean标签里面有属性用于设置单实例还是多实例(scope)
scope 的属性值
1.默认值 singleton
2. prototype

singleton 和 prototype的区别
1.singleton 表示单实例 prototype表示多实例
2.设置scope 标签为 singleton的时候 加载spring配置文件的时候就会创建单实例对象
设置scope 标签为 prototype的时候,不是在加载spring配置文件时候创建对象,是在调用getbean的时候创建多实例对象
request
session

Bean生命周期
生命周期: 从对象创建到对象销毁的过程

Bean 的生命周期 :
(1)通过构造器创建bean实例(无参构造)
(2) 为bean的属性设置值 和对其他bean的引用(调用set方法)
(3)调用bean 的初始化的方法(需要进行配置)
(4)bean 可以使用了(对象获取到了)
(5) 当让其关闭的时候,调用bean的销毁的方法(需要进行配置销毁的方法)

演示bean的生命周期
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bean的后置处理器 bean的生命周期
(1)通过构造器创建bean实例(无参构造)
(2) 为bean的属性设置值 和对其他bean的引用(调用set方法)
(3) 把bean的实例传递bean后置处理器的方法
(4) 调用bean 的初始化的方法(需要进行配置)
(5) 把bean的实例传递bean后置处理器的方法
(6) bean 可以使用了(对象获取到了)
(7) 当让其关闭的时候,调用bean的销毁的方法(需要进行配置销毁的方法)

IOC操作 Bean管理(xml自动装配)
1.什么是自动装配
根据指定装配规则(属性名称或者属性类型),在spring 中自动将匹配的属性进行注入
2.演示自动装配
bean 标签属性autowire
byName :根据属性名称注入 要注bean的 id值 和类的属性名称一样
byType 根据属性类型注入

框中语句注释掉了也可以正确输出出哇哈哈 在这里插入图片描述

IOC操作 Bean 管理(外部属性文件)
1.直接配置数据库信息
配置德鲁伊连接池
在这里插入图片描述
引入外部属性文件
1,引入名称空间
在这里插入图片描述
在spring配置文件使用标签引入外部属性文件
在这里插入图片描述
在这里插入图片描述

IOC操作 Bean管理(基于注解方式)

什么是注解
(1)注解是代码特殊标记, 格式: @注解名称(属性名称=属性值)
(2) 使用注解,注解作用在类上面,方法上面,属性上面
(3)使用注解的目的 :简化xml配置

Spring针对Bean 管理 中创建对象提供的注解
1.@Component
2.@Service
3.@Controller
4.@Repository
以上四个注解功能是一样的,都可以用来创建bean实例

3.基于注解方式实现对象创建
第一步 引入新依赖

在这里插入图片描述

第二步:开启组件扫描 、

在这里插入图片描述

base-package 里面填要扫描的包的路径
如果有多个包可以用逗号分开
2.可以写扫描包的上层目录
在这里插入图片描述
第三步创建类 在类上面添加创建对象注解
value 属性值可以不写 默认值是类名称 首字母小写
在这里插入图片描述
在这里插入图片描述
注意::在这里插入图片描述
在这里插入图片描述

context:include-filter 设置扫描哪些内容
上面例子 是扫描在com.atguigu下面Controller的注解
下面 是不扫描在com.atguigu下面除了Controller的注解

在这里插入图片描述

5 基于注解方式属性注入
注解
1.@AutoWired :根据属性类型进行自动装配
第一步 把service 和dao 对象进行创建 (加上注解)
第二步 在service注入dao对象 在service类添加dao类型属性 在属性上面使用注解(属性不需要有set方法)
在这里插入图片描述

 2. @Qualifer     :根据属性名称进行注入

@Qualifer的使用 和上面 @AutoWired一起使用
指明注入的属性和类型
在这里插入图片描述

在这里插入图片描述

 4. @Resource:    可以根据类型注入,可以根据名称注入
         ![在这里插入图片描述](https://img-blog.csdnimg.cn/87bdaa34ec254f4db272f5cdf2c8067d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bGB5a2p5LiN5Yqq5Yqb,size_20,color_FFFFFF,t_70,g_se,x_16)

在这里插入图片描述
这个注解不是Spring中的注解 是 javx重点注解

5.@Value 注入普通类型属性
在这里插入图片描述
完全注解开发

1.创建配置类 替代xml配置文件
在这里插入图片描述
2.编写测试类
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值