zoukankan      html  css  js  c++  java
  • Spring IOC(控制反转)

    控制反转:

      在使用了Spring框架之后对象不在由调用者来创建,而是由Spring容器来创建

      Spring容器会负责控制程序之间的关系而不是由调用者的程序代码直接控制

      这样控制权由应用程序转移到了Spring容器,控制权发生了反转,这就是Spring控制反转

      获得依赖对象的过程被反转了,控制反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入

      于是"控制反转"也叫"依赖注入"(Dependency Injection)简写(DI)所谓的依赖注入,就是由IOC容器在运行期间

      动态的将某种依赖关系注入到对象之中

      所以,依赖注入(DI)和控制反转(IOC)是从不同角度的描述的同一件事情,就是指通过引入IOC容器

      利用依赖关系注入的方式,实现对象之间的解耦

     实例代码:

      1,普通数据类型和集合的注入

          【1】创建user实体类  提供set方法以及构造和toString

          

          【2】编写配置文件

             

        <bean id="user" class="com.bdqn.cn.pojo.User">
             <!-- 通过构造注入 -->
    <!--        <constructor-arg index="0" value="张三"/>
            <constructor-arg index="1">
                <list>
                    <value>list1</value>
                    <value>list2</value>
                </list>
            </constructor-arg>
            <constructor-arg index="2">
                <map>
                    <entry key="hhh" value="哈哈哈"/>
                    <entry key="zzz" value="啧啧啧"/>
                    <entry key="bbb" value="不不不"/>
                </map>
            </constructor-arg>
                    <constructor-arg index="3">
                <set>
                    
                    <value>张三</value>
                    <value>李四</value>
                    <value>王五</value>
                
                </set>
            </constructor-arg>
            <constructor-arg index="4">
            
                <array>
                    
                    <value>aaaaaaaa</value>                
                    <value>bbbbbbbb</value>                
                
                </array>
            
            </constructor-arg> -->
            
            
            
            
            <!-- 通过setter方法注入参数 -->
            <property name="username" value="赵云" />
            <property name="list">
            
                <list>
                    
                    <value>看书</value>
                    <value>学习</value>
                
                </list>
            
            </property>
            <property name="map">
            
                <map>
                    
                    <entry key="guangshou" value="广州" />
                    <entry key="shanghai" value="上海" />
                    <entry key="shenzhen" value="深圳" />
                
                </map>
            
            </property>
            <property name="set">
            
                <set>
                
                    <value>关羽</value>
                    <value>张飞</value>
                    <value>赵云</value>
                    <value>马超</value>
                    <value>黄忠</value>
                
                </set>        
            
            </property>
            <property name="array">
            
                <array>
                    
                    <value>aaaaaaaa</value>
                    <value>bbbbbbbb</value>
                
                </array>
            
            </property>
        </bean>

          【3】编写测试类

          

        2,对象注入

         【1】创建接口和实现类

          

         【2】创建业务层

          

          

    public class UserServiceImpl implements UserService {
        //这里只是声明  没有具体实现
        private UserDao userDao;
        //给userDao传入参数  set方式
    /*    public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }*/
        //构造方法形式
        public UserServiceImpl(UserDao userDao) {
            super();
            this.userDao = userDao;
        }
    
        @Override
        public void say() {
            this.userDao.say();
            System.out.println("UserServiceImpl...");
        }
    
    
    }

           【3】编写配置文件

          

           【4】编写测试类

          

          

  • 相关阅读:
    原型链加强练习
    Javascript中的原型链,__proto__和prototype等问题总结
    HTTPS 到底加密了什么?
    PrismCDN 网络的架构解析,以及低延迟、低成本的奥秘
    取代 FlashP2P,H5P2P 将成为 WebP2P 主流
    低延时的P2P HLS直播技术实践
    深挖“窄带高清”的实现原理
    【省带宽、压成本专题】爱奇艺第一季度又烧了11个亿元,什么时候是个头?
    【省带宽、压成本专题】深入解析 H.265 编码模式,带你了解 Apple 全面推进 H.265 的原因
    让互联网更快,Server Push 特性及开启方式详解
  • 原文地址:https://www.cnblogs.com/yz-bky/p/12576753.html
Copyright © 2011-2022 走看看