专题一 IOC
主要内容
- 接口及面向接口编程
- 什么是 IOC(控制反转):控制权转移,应用程序本身不负责
- Spring的 Bean 配置
- Bean 的初始化
- Spring 的常用注入方式
接口及面向接口编程
接口
- 接口即声明,声明哪些方法对外提供。
- 使用接口沟通,使其能被修改内部而不影响外部其他实体的与其交互的方式(Java8中接口可以拥有方法体)
面向接口编程
- 结构设计中,分清层次及调用关系,每层只向外(上层)提供一组功能的接口,各层仅依赖接口而非实现类
- 接口内部的实现变动不影响各层之间的调用,这一点在公共服务中尤为重要
- “面向接口编程”中的“接口”是用于【隐藏具体的实现】和【实现多态性的组件】(2点)
什么是IOC
- IOC:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护
- DI(依赖注入)是其一种实现方式。(获取依赖对象的过程被反转,过程由自身管理变为有 IOC 容器主动注入,即依赖注入)
- 目的:创建对象并且组装对象之间的关系
下图为 Spring 官网给出的 IOC 说明
Spring 的 Bean 配置
配置一般存放于 spring-ioc.xml 文件中
举例
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd" >
<bean id="oneInterface" class="com.imooc.ioc.interfaces.OneInterfaceImpl"></bean>
</beans>
Bean 容器的初始化
-
基础:两个包
- org.springframework.beans
- org.springframework.context
- BeanFactory 提供配置结构和基本功能,加载并初始化 Bean
- ApplicationContext 保存了 Bean 对象并在 Spring 中广泛使用
- 3 中初始化方式:ApplicationContext
- 本地文件
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("F:/workspace/appcontext.xml");
- Classpath
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-context.xml");
- Web 应用中依赖 servlet 或 Listener
- 本地文件
Spring 注入
- Spring 注入指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为
-
常用的两种注入方式
- 设值注入
- 构造注入
设值注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd" >
<bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl">
<property name="injectionDAO" ref="injectionDAO"></property>
</bean>
<bean id="injectionDAO" class="com.imooc.ioc.injection.dao.InjectionDAOImpl"></bean>
</beans>
注意:需要在 Service 文件中添加 setInjectionDAO 方法。property 中 name 对应 set*
构造注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd" >
<bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl">
<constructor-arg name="injectionDAO" ref="injectionDAO"></constructor-arg>
</bean>
<bean id="injectionDAO" class="com.imooc.ioc.injection.dao.InjectionDAOImpl"></bean>
</beans>
注意:需要在 Service 文件中添加构造方法。name 对应 service 中 构造器参数名
热门评论
感觉自己排版越来越好了