参考雷丰阳老师的视频
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