2020/4/10 Spring IoC DI工作机制

IOC(控制反转):全称为:Inverse of Control。从字面上理解就是控制反转了,在自身对象中的一个内置对象的控制反转,反转后不再由自己本身的对象进行控制这个内置对象的创建,而是由第三方系统去控制这个内置对象的创建。

DI(依赖注入):全称为Dependency Injection,意思自身对象中的内置对象是通过注入的方式进行创建。

 那么IOC和DI这两者又是什么关系呢?

IOC就是一种软件设计思想,DI是这种软件设计思想的一个实现。而Spring中的核心机制就是DI。

IoC

1. 先写一个userDao接口,再写一个实现类实现这个方法。
2. 通过applicationContext.xml文件创建一个id为userDao的Bean。
3. 在测试类中调用say()方法。
public class TestIoC {
	public static void main(String[] args) {
		//初始化Spring容器,加载配置文件
		ApplicationContext applicationContext =
				new ClassPathXmlApplicationContext("applicationContext.xml");
		//通过容器获取userDao实例
		UserDao userDao=(UserDao) applicationContext.getBean("userDao");
		//调用say()方法
		userDao.say();
	}
}

其中ClassPathXmlApplicationContext会寻找指定的xml文件,并装载完成xml文件的实例化工作。
创建Spring容器后,通过Object getBean(String name)来获取指定的Bean,需要强制转换。

DI

1. 将id为userDao的Bean实例注入到userService实例。
<bean id="userDao" class="com.woongcha.ioc.UserDaoImpl" />
	<!--添加一个id为userService的实例 -->
	<bean id="userService" class="com.woongcha.ioc.UserServiceImpl">
	<!-- 将id为userDao的Bean实例注入到userService实例中 -->
	   <property name="userDao" ref="userDao" />
	</bean>	
</beans>
2. 编写测试类。
public class TestDI {
	public static void main(String[] args) {
			//初始化Spring容器,加载配置文件
			ApplicationContext applicationContext =
					new ClassPathXmlApplicationContext("applicationContext.xml");
			//通过容器获取UserService实例
			UserService userService=
					(UserService) applicationContext.getBean("userService");
			//调用实例中的say()方法
			userService.say();
	}
}

Spring框架的优点:
1. 降低了组件之间的耦合性。
2. 使应用程序代码对框架的依赖最小化。
3. 提供了对AOP(Aspect Oriented Programming,面向切面编程)的支持。
4. 方便测试Spring程序。
5. 通过配置就可以完成对事务的管理,无需手动编程。
6. 方便集成各种优秀的框架。
7. 提供了封装,使API应用难度降低。

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页