zoukankan      html  css  js  c++  java
  • spring之IOC和DI实现

    Spring核心思想 :

      IOC控制反转

      DI依赖注入

      AOP切面编程

    IOC思想:

     场景描述:

        在没有加入spring框架之前我们调取业务层时需要创建对象,例如:  接口名   变量名=new  接口的实现类(); 

      问题描述.

         接口和实现类之间会产生依赖关系,如果想切换接口的实现类我们就需要进行修改原代码,不利于管理;

      解决上述问题;

        我们使用工厂模式,把创建对象的过程放在工厂类当中,只需要修改源代码为接口名  变量名=工厂创建的对象过程;

      在一定的程度对代码进行了优化,这样我们表面上把耦合性就降低了,其实并没有,

      问题描述:工厂模式没有让我们从实质上去降低耦合度

      解决方案:使用xml文件+Factory模式来对代码进行优化,

    <bean name="UserService" class="com.fjk.shop.web.servlet.UserServlet"></bean>

        接口名  变量名=Factory.getInstrance("UService");

        思想:我们把具体的实现类写到xml中,让配置文件进行具体是实现类的管理,

      在工厂中使用xpath技术解析xml标签去获取具体实现类的字符串再使用反射技术进行创建对象,这样我们就成功的把程序的耦合性就降低了

    这一复杂过程就是IOC思想,控制反转就是解决了程序的耦合性,把创建对象的过程交给spring来管理,spring实现控制反转就是使用了xml+工厂模式+反射技术实现IOC

    搭建基础的Spring框架来实现IOC控制反转案例

        1.导入jar包

                           

        2.创建配置文件

          默认路径为src根目录下,命名为applicationContext.xml

        3.书写代码

      创建UserService接口

    public interface UserService {
    	public abstract void login();
    
    }
    

      创建UserService的实现类UserServiceImp

    public class UserServiceImp implements UserService{
    	@Override
    	public void login() {
    		System.out.println("login.....");
    		
    	}
    }
    

      测试方法

        @Test
    	public void test01(){
    		//加载配置文件
    		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    		//使用控制反转来实现对象的创建
    		UserService userService = (UserService) applicationContext.getBean("UserService");
    		userService.login();
    	}
    

     ApplicationContext接口的实现类有两种: ClassPathXmlApplicationContext,FileSystemXmlApplicationContext;使用实现类来加载配置文件.会立即加载

     BeanFactory接口的子接口有一个ApplicationContext,会延迟加载只有在getbean时才会创建bean;开发中不常使用.

    AppliCationContext它会在配置文件加载时,就会初始化Bean,并且ApplicationContext
    它 提 供 不 同 的 应 用 层 的 Context 实 现 。 例 如 在 web 开 发 中 可 以 使 用
    WebApplicationContext.
    

       

      

     DI依赖注入:

    修改applicationContext.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING // DTD BEAN 2.0 // EN"
            "http://www.springframework.org/dtd/spring-beans-2.0.dtd">     
    <beans> 
            <bean id="UserService" class="com.baidu.test.UserServiceImp">
            <property name="name" value="张三"></property>
            </bean>
    </beans>
    

      UserServiceImp文件

    public class UserServiceImp implements UserService{
    	private String name;
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	@Override
    	public void login() {
    		System.out.println("login.....");
    		System.out.println(name);
    		
    	}
    }
    

      测试输出:

    login.....
    张三
    

      使用xml文件注入了值

      IOC和DI的区别:

        IOC是控制反转,创建对象的过程交由spring来管理

        DI是依赖注入,在创建对象的过程中,对象所依赖属性通过配置注入对象中.

  • 相关阅读:
    树、森林和二叉树的转换
    弱校ACM奋斗史
    安徽科技学院2016-2017-1学期2013信息与计算科学12班期末测试_题解
    安徽省2016“京胜杯”程序设计大赛_K_纸上谈兵
    安徽省2016“京胜杯”程序设计大赛_J_YZK的大别墅
    安徽省2016“京胜杯”程序设计大赛_I_恶魔A+B
    安徽省2016“京胜杯”程序设计大赛_H_单身晚会
    安徽省2016“京胜杯”程序设计大赛_G_木条染色
    安徽省2016“京胜杯”程序设计大赛_F_吃在工大
    LeetCode() Merge Intervals 还是有问题,留待,脑袋疼。
  • 原文地址:https://www.cnblogs.com/fjkgrbk/p/spring_IOC.html
Copyright © 2011-2022 走看看