前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 点击跳转浏览。
IOC是什么
控制反转,顾名思义就是控制权发生反转,例如
IUserService service = new UserService();
IUserService service= (IUserService) BeanFactory.getBean("UserService");
上面那一段控制权是new,就是完全自主控制引用那个dao,下面那个是把控制权交给BeanFactory,由BeanFactory通过后面的字符串配置。这种控制权的转移就叫控制反转。
IOC能做什么
削减计算机程序的耦合(解除我们代码中的依赖关系)。并且spring中的ioc只能解决程序之间的依赖关系。其他的都做不了
Spring中基于xml的IOC解耦
spring context这个依赖里面其实就是Map容器里面放着Bean对象
然后我们打开之前收藏的spring fromwork
然后在Core里面搜索xmlns第一就是把头复制下来
<?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">
</beans>
比如我们要解决Spring中使用工厂模式解耦详解这个里面service层和dao层的耦合,我们接下来的步骤是
第一步在Beans里面配置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">
<!--把对象的创建交给spring进行管理-->
<!--配置唯一标记和全限定类名-->
<bean id="userService" class="Service.IMPL.UserService"></bean>
<bean id="userDao" class="Dao.IMPL.UserDao"></bean>
</beans>
第二步就是读取配置文件,通过id来获取Bean
package ui;
import Service.IUserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 模拟一个表现层,用于调用业务层
*/
public class Client {
public static void main(String[] args) {
//1.使用 ApplicationContext 接口,就是在获取 spring 容器
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
//2.根据 bean 的 id 获取对象
IUserService service = (IUserService) context.getBean("userService");
service.save();
}
}
结果运行通过
总结步骤
基于xml的IOC解耦的步骤是
1,创建配置文件,把要配置的beans交给Spring管理
2,使用一个对象去得到那个核心容器。这个容器是spring里面的,相当于工厂模式里面的Map容器,我们不用创建。
3,再根据配置文件的id获取bean对象。