Spring学习笔记(四):反转控制 与 依赖注⼊

    技术2022-07-11  81

    Spring学习笔记(四):反转控制 与 依赖注⼊

    1.反转(转移)控制(IOC Inverse of Control)2.依赖注⼊ (Dependency Injection DI)3.Spring⼯⼚创建复杂对象1. 什么是复杂对象2.Spring⼯⼚创建复杂对象的3种⽅式第一种:FactoryBean接⼝第二种:实例工厂第三种:静态工厂 Spring⼯⼚创建对象的总结

    1.反转(转移)控制(IOC Inverse of Control)

    1. 控制:对于成员变量赋值的控制权 2. 反转控制:把对于成员变量赋值的控制权,从代码中反转(转移)到Spring⼯⼚和配置⽂件中完成 3. 好处:解耦合 4. 底层实现:⼯⼚设计模式

    2.依赖注⼊ (Dependency Injection DI)

    1.注⼊:通过Spring的⼯⼚及配置⽂件,为对象(bean,组件)的成员变量赋值 2.依赖注⼊:当⼀个类需要另⼀个类时,就意味着依赖,⼀旦出现依赖,就可以把另⼀个类作为本类的成员变量,最终通过Spring配置⽂件进⾏注⼊(赋值)。 3.好处:解耦合

    3.Spring⼯⼚创建复杂对象

    1. 什么是复杂对象

    复杂对象:指的就是不能直接通过new构造⽅法创建的对象 如:Connection,SqlSessionFactory

    2.Spring⼯⼚创建复杂对象的3种⽅式

    第一种:FactoryBean接⼝

    实现FactoryBean接⼝ Spring配置⽂件的配置 # 如果Class中指定的类型 是FactoryBean接⼝的实现类,那么通过id值获得的是这个类所创建的复杂对象Connection <bean id="conn" class="com.baizhiedu.factorybean.ConnectionFactoryBean"/> 细节 如果就想获得FactoryBean类型的对象ctx.getBean("&conn") 获得就是ConnectionFactoryBean对象isSingleton⽅法 返回 true 只会创建⼀个复杂对象返回 false 每⼀次都会创建新的对象 问题:根据这个对象的特点 ,决定是返回true(SqlSessionFactory) 还是 false (Connection)mysql⾼版本连接创建时,需要制定SSL证书,解决问题的⽅式 url ="jdbc:mysql://localhost:3306/suns?useSSL=false"、依赖注⼊的体会(DI) 把ConnectionFactoryBean中依赖的4个字符串信息 ,进⾏配置⽂件的注⼊ 好处:解耦合 <bean id="conn" class="com.baizhiedu.factorybean.ConnectionFactoryBean"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/suns?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> FactoryBean的实现原理[简易版] Spring内部运⾏流程 1. 通过conn获得ConnectionFactoryBean类的对象 ,进⽽通过instanceof 判断出是FactoryBean接⼝的实现类 2. Spring按照规定 getObject() --->Connection 3. 返回Connection

    FactoryBean总结 Spring中⽤于创建复杂对象的⼀种⽅式,也是Spring原⽣提供的,后续讲解Spring整合其他框架,⼤量应⽤FactoryBean

    第二种:实例工厂

    避免Spring框架的侵⼊整合遗留系统 <bean id="connFactory"class="com.baizhiedu.factorybean.ConnectionFactory"></bean> <bean id="conn" factory-bean="connFactory" factory-method="getConnection"/>

    第三种:静态工厂

    <bean id="conn" class="com.baizhiedu.factorybean.StaticConnectionFactory" factory-method="getConnection"/>

    Spring⼯⼚创建对象的总结

    Processed: 0.012, SQL: 12