zoukankan      html  css  js  c++  java
  • spring基础之Spring的IOC(二)

      IOC是一个容器,在spring中,它会认为一切java资源都是javaBean,容器的目标就是管理这些Bean和他们之间的关系,Spring IOC里面装载的各种Bean,也可以理解为Java的各种资源,包括javaBean的创建,事件,行为等,他们由IOC容器管理。除此之外,各个javaBean之间肯定会存在着一定的关系,比如班级是依赖于老师和学生组成的,假设老师,学生都是javaBean,那么他们显然形成了依赖关系,老师和学生有教育和被教育的关系,这些都可以使用SpringIOC容器进行管理。只是SpringIOC管理对象和其依赖关系,采用的不是人为的主动创建,而是由SpringIOC自己通过描述创建的。也就是说Spring是依靠描述来完成对象的创建及其依赖关系的。

      下面我们可以举一个简单的例子描述这个问题,比如用户购买了一部骁龙855的手机,去到手机店,问销售员说我想买一部骁龙855的手机,你帮我推荐一下吧,此时有两款手机可供选择,一加7和小米9,具体要买哪一款呢?代码如下、

    User user  = new User();
     //买了一部小米手机
    Phone phone = new XiaoMi();
    user.setPhone(phone);
    user.usePhone();

    买了小米手机后,用户就和小米手机产生了捆板,这样就会有一个弊端:如果用户换了其他手机品牌,用户又得重新setPhone(手机品牌);。这样Phone接口和其实现类XiaoMi耦合了,如果有一天不在用小米,而是要用一加,那么就要把代码修改为

    User user  = new User();
     //买了一部一加手机
    Phone phone = new OnePlus();
    user.setPhone(phone);
    user.usePhone();
    

    那如果其他更好的855手机,岂不是还是要修改代码?如果系统一大就要不断修改,那么对其可靠性将是极大的挑战,而SpringIOC可以解决这个问题Winking smile

      使用SpringIOC,我们不用new的方式去创建对象,而是使用配置的方式,然后让SpringIoc容器自己通过配置自己去找配置。

       <bean id="xiaomi" class="XiaoMi"/>
       <bean id="onePlus" class="OnePlus"/>
       <bean id="user" class="User">
            <property name="phone" ref="xiaomi"/>
       </bean>
       <!--如果要买一加手机,只需要将ref改为onePlus-->
       <property name="phone" ref="onePlus"/>


    总结:不需要去找资源,只要想SpringIoc容器描述所需资源,SpringIoc自己会找到你所需要的资源,这就是SpringIoc的理念。这样就把Bean之间的依赖关系解耦了,更容易写出结构清晰的程序。除此之外,SpringIOC还提供了对JavaBean的生命周期管理,可以延迟加载,可以在生命周期内定义一些行为等,更加方便有效地管理和使用java资源。

  • 相关阅读:
    sql语句中as的用法和作用
    设置国内AndriodSDK代理
    Ionic开发环境搭建
    SpringMvc+Mybatis开发调用存储过程
    SpringMvc的JSON数据交互
    SpringMvc+Mybatis开发需要的jar包
    nested exception is java.lang.NoClassDefFoundError: org/hibernate/validator/resourceloading/ResourceBundleLocator
    SpringMvc错误:HTTP Status 500
    解决在Tomcat中的server.xml中修改了配置,启动后还原的问题
    SpringMvc参数绑定出现乱码解决方法
  • 原文地址:https://www.cnblogs.com/jamal/p/10961092.html
Copyright © 2011-2022 走看看