Java后端07(Spring未完成)
Spring 涉及的设计模式:单例模式,简单工厂模式,代理模式,观察者模式,反射,注解。。。。。
Spring配置文件文件头
IOC 控制反转 ---- 将创建对象的权力由开发者交 给 Spring(缓解对象和对象之间的耦合度)
在传统模式下,对象的创建和赋值,都是由开发者自己手动完成,事实情况下,开发者只关心如何获取赋值好的对象,但是并不希望自己手动进行创建对象和赋值的事情(spring中所有的对象都是从实例工厂中自动创建,涉及到简单工厂模式)
IOC底层原理
[*]xml解析(负责读取配置文件中 Bean 的相关信息)
[*]简单工厂模式(借助 BeanFactory 完成对象的实例化和返回)
[*]反射(不使用 new 创建对象的根本原因)
简单工厂模式
优点:
[*]设计与实现分离(开发者不需要关心对象是如何创建出来的)
[*]如果要拓展业务,并不会影响之前的业务,只需要拓展子类即可
IOC容器的两种实现方式
[*]BeanFactory:是Spring内部使用的接口,不建议给开发人员使用,该容器加载配置文件时,并不会创建响应对象,当开发者尝试获取对象的时候,才会创建对象(类似懒汉模式,具有延迟加载的特性)
[*]ApplicationContext:BeanFactory的子接口,一般由开发人员使用,该容器在加载配置文件的时候,就会创建对象(类似饿汉模式,不会出现并发安全问题,线程安全)
DI 依赖注入 ---- 在你配置好 bean 的情况下,由 Spring 帮你完成对象的赋值
优点:
[*]实现了接口和实现的分离
[*]组件化的思想,分离关注点,使用接口时,不再关注实现
Spring 的 bean 管理
⭐Bean的声明周期
[*]常规五步声明周期
通过构造器创建 bean 实例 => 通过反射调用 setter 方法完成属性赋值 => 调用 bean 的初始化方法 => 获取 bean 实例 => 当容器关闭的时候, 调用 bean 的销毁方法
[*]
bean创建(IOC)
[*]基于xml的配置方式
结构分析
id 对象的唯一标识,通过 id 获取 bean 实例
class 对象所属类的完整路径,用于提供给 spring 借助反射完成的对象创建
scope 表示单/多实例模式
<bean id="dog" >
<property name="name" value="dog01"/>
<property name="type" value="dogType01"/>
</bean>
<bean id="dog" >
<constructor-arg name="name" value="dog01"/>
</bean>
<bean id="dog" >
<property name="name"><null/></property>
</bean>
<bean id="dog" >
<property name="name">
<value><!]></value>
</property>
</bean>
<bean id="dog" >
<property name="name" value="dog01" />
<property name="type" value="type01" />
</bean>
<bean id="person" >
<property name="dog" ref="dog" />
</bean>
<bean id="person" >
<property name="dog">
<bean >
<property name="name" value="dog01" />
<property name="type" value="type01" />
</bean>
</property>
</bean>
<bean id="person" >
<property name="dog" ref="dog" />
<property name="dog.type" value="type01" />
<property name="dog.name" value="dog01" />
</bean>
<bean id="dog"/>
<bean id="person" >
<property name="hobbiesArray">
<array>
<value>games</value>
<value>coding</value>
</array>
</property>
<property name="hobbiesList">
<list>
<value>games</value>
<value>coding</value>
</list>
</property>
<property name="hobbiesSet">
<set>
<value>games</value>
<value>coding</value>
</set>
</property>
<property name="hobbiesMap">
<map>
<entry key="games" value="游戏" />
<entry key="coding" value="编码" />
</map>
</property>
</bean>
<bean id="factoryBeanDemo"/>
[*]基于注解方式
属性值的注入(DI)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]