Spring-IOC

参考雷丰阳老师的视频

IOC DI

IOC :控制反转

控制:资源的获取方式

    主动式:(要什么资源都自己创建)

    被动式:资源的获取不再由我们自己创建 而是交给一个容器来创建和设置

 

容器:管理所有的组件(有功能的类):假设BookServlet受容器管理,BookService也受容器管理,容器可以自动探查出哪些组件类需要用到另一组组件类,容器会帮助我们创建BookService对象,赋值进去

 

DI(Dependency Injection)依赖注入

容器能知道哪个组件运行的时候,需要用到另外一个类,容器通过反射的形式,将容器中准备好的BookService对象注入(利用反射给属性赋值)到BookServlet

容器中对象的创建在容器创建完成的时候就已经创建好了

同一个组件在IOC容器中是单实例的,容器启动完成都已经创建好准备好。

javaBean的属性名是由getter/setter方法决定的

 

Ioc

根据bean的类型从IOC容器中获取bean的实例

如果ioc容器中这个类型的bean有多个,查找就会报错。

property 调用get set 方法

 

通过构造器为bean的属性赋值

Constructor-arg 的数量和构造器中保持一致

 

先调用无参构造器创建对象 并调用get/set方法为属性赋值

直接调用有参构造器

 

如果省略参数类型,可以指定参数索引 index +参数类型

 

通过P名称空间为bean赋值 导入p名称空间

名称空间xml中名称空间是用来防治标签重复的

1.导入p名称空间 2,写带前缀的标签/属性

 

正确的为各种属性赋值

测试使用null用property 中的null标签

引用类型赋值(引用其他bean 引用严格bean)

ref 代表引用外面的一个值 引用其他bean

引用内部bean 可以用bean new 一个bean对象

集合类型赋值

<list>  标签内部可以用bean ref

内部bean 只能内部获取到, 不能通过id

 

<map> 一个entry 代表一个键值对

<properties> 类型 所有的key. Value 都是string 

 

 

Util 名称空间创建集合类型的bean 方便别人引用

<util:map> 创建的map可以通过id 获取

 

级联属性赋值.   可以修改属性的属性 原来bean的值会被一起修改

<property name =“car” ref=“car01”>

<property name=“car.price” value=“3000”>

 

通过继承实现bean信息的重用  

<bean id ="person06"  parent="person05">

 

abstract 表示这个bean是抽象的,不能获取他的实例  只能被别人继承

 

bean之间的依赖

bean的创建顺序 根据bean的配置顺序

<bean id ="car"depends-on="book,person">

创建顺序为book person car

 

bean的作用域 单实例和多实例的bean 

bean的作用域:指定bean是否单实例 默认 单实例的

scope 

singleton:单例 默认

prototype :多例

 

单例的对象在容器启动完成之前就已经创建好对象,保存在容器中

任何时候获取,拿到的是之前创建好的bean

多实例 容器启动不会创建,获取时会创建一个新的实例

 

静态工厂和动态工厂

配置通过静态工厂方法创建的bean 实例工厂方法创建的bean FactoryBean

bean 的创建默认就是框架利用反射new 出来的bean 实例

工厂模式 工厂帮我们创建对象

AirPlaneFactory.getAirPlane(飞机名)

静态工厂 工厂本身不用创建对象 通过静态方法调用 对象=工厂类.工厂方法名()

实例工厂 工厂类 工厂类对象 =new 工厂类();

              工厂类对象.getAirPlane(飞机名)

<bean id =“airPlane01” class=“com.sundear.demo.factory.AirPlaneStaticFactory”

Factory-method =“getAirPlane”>

<constructor-arg value=“李四”></constructor>

静态工厂(不需要创建工厂本身)指定工厂全类名+工厂方法

 

 

实例工厂

Factory-bean 指定当前对象创建使用哪个工厂

1.先配置出实例工厂对象

2.配置我们要创建的AirPlane要使用哪个工厂实例  Factory-bean

3.指定工厂方法

 

FactoryBean

  只要实现了这个接口的类都是Spring可以认识的工厂类

 Spring 会自动调用工厂方法

getObject() 工厂方法

<bean id =“myFactoryExample” class=“com.sundear.demo.MyfactoryExample”>

获取时创建bean

 

泛型依赖注入原理:注入一个组件的时候,他的泛型也是参考标准

 

父类的类型 com.sudear.service.BaseService

带泛型的父类类型 com.sundear.service.BaseService<com.sundear,bean.Book>

spring中可以用带泛型的父类的类型来确定子类的类型

 

 

ioc

容器:帮我们管理所有的组件

1.依赖注入:@Autowired 自动赋值

某个组件如果要使用Spring提供的更多功能(ioc aop),必须加入到容器中

1,容器启动会查u你更加爱你所有单实例bean

ioc.getbean(“”) 从容器中获取满足要求的bean

 

 

posted @ 2021-09-25 18:50  下饭  阅读(29)  评论(0编辑  收藏  举报