IOC及Bean容器

时间:2023-03-08 16:41:21

1. 接口及面向接口编程

1.1. 接口

用于沟通的中介物的抽象化

实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式

对应JAVA接口即声明,声明了哪些方法是对外公开提供的

在JAVA8中,接口可以拥有方法体

1.2. 面向接口编程

结构设计中,分清层次及调用关系,每层只向外(上层)提供一组功能接口,各层间仅依赖接口而非实现类

接口实现的变动不影响各层间的调用,这一点在公共服务中尤为重要

“面向接口编程”中的“接口”是用于隐藏具体实现和实现多态性的组件

 package com.imooc.ioc.interfaces;

 public class Main {
public static void main(String[] args) {
OneInterface oif = new OneInterfaceImpl();
System.out.println(oif.hello("word"));
}
}
 package com.imooc.ioc.interfaces;

 public class OneInterfaceImpl implements OneInterface {
public String hello(String word) {
return "Word from interface\"OneInterface\":" + word;
}
}
 package com.imooc.ioc.interfaces;

 public interface OneInterface {
String hello(String word);
}

2. 什么是IOC

Ioc:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护

DI(依赖注入)是其一种实现方式

目的:创建对象并且组装对象之间的关系

3. 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/spring-beans.xsd"> <bean id="oneInterface" class="com.imooc.ioc.interface.OneInterfaceImpl"></bean>
</beans>

4. 单元测试

——下载junit-*.jar并引入工程

——创建UnitTestBase类,完成对Spring配置文件的加载、销毁

——所有的单元测试类都继承自UnitTestBase,通过它的getBean方法获取想要得到的对象

——子类(具体执行单元测试的类)加注解:@RunWith(BlockJUnit4ClassRunner.class)

——单元测试方法加注解:@Test

——右键选择要执行的单元测试方法执行或者执行一个类的全部单元测试方法

5. Bean的初始化

基础:两个包

——org.springframework.beans

——org.springframework.context

——BeanFactory提供配置结构和基本功能,加载并初始化Bean

——ApplicationContext保存了Bean对象并在Spring中被广泛使用

方式,ApplicationContext

——本地文件

 FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("F:/workspace/appcontext.xml");

——Classpath

 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-context.xml");

——Web应用中依赖Servlet或Listener

 <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>context</servlet>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-satrtup>
<servlet>

6. Spring的常用注入方式

Spring注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为

常用的两种注入方式

6.1. 设值注入

 <?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/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>

6.2. 构造注入

 <?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/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>