yxm1798816241
yxm1798816241
采纳率100%
2017-11-29 14:00 阅读 1.1k
已采纳

spring ioc di 怎么理解

spring ioc di 怎么理解,怎么使用,为什么会有它们

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    liu5645849 liu5645849 2017-11-29 15:24

    ioc即控制反转,粗浅点理解就是将创建bean(对象)的权利交予spring容器,让spring去控制。spring怎么控制-通过配置文件
    至于使用 一个简单的例子:比如我有一个UserService接口和他的一个实现类UserServiceImpl,现在要得到UserService的一个实例,
    就到spring的配置文件(xml)中配置相关信息。

    <bean id="userServiceId" class="com.csdn.ioc.UserServiceImpl"></bean>
    其中class为UserServiceImpl的全限定名,id看测试类applicationContext.getBean("userServiceId", UserService.class)里的userServiceId
    测试类:
        String xmlPath = "com/csdn/ioc/beans.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        UserService userService = applicationContext.getBean("userServiceId", UserService.class);
    

    这样就得到了一个UserService的实例,在这个过程中我们自己始终都没有new过一个对象,该过程都让spring完成了!

    di: 依赖注入 可以分开理解
    d-依赖:在A类中有B类作为A类的一个类属性,说A类依赖B类,形成依赖关系;
    i-注入:简单点理解其实就是setter注入;
    想想你学java基础面向对象封装时,定义一个Person类,类里面有很多属性,要给这些属性赋值是不是需要先new Person();
    然后再用对象的实例person.setxx("value")这样去给属性赋值,这个过程你就可以理解成注入;
    回到spring中:依赖注入也就是将注入的任务交给spring
    有一个Person接口和他的实现类PersonImpl,PersonImpl里有另一个接口Sleep做为PersonImpl的类属性
    public interface Person{

    }
    public class PersonImpl implements Person{
    
        private Sleep sleep;
    
        public void setSleep(Sleep sleep){
                this.sleep = sleep;
        }
    }
    
    配置信息,实现注入
    <bean id="person" class="com.csdn.di.PersonImpl">
                <property name="sleep" ref="sleepId"></property>
    </bean>
    <bean id="sleepId" class="con.csdn.di.SleepImpl"></bean>
    这样就将Sleep的实例注入到了PersonImpl中的类属性中了
    

    一个bean标签就时创建一个实例
    property就是设置属性,name属性的值就是类属性名,ref属性的值就是作为类属性那个类bean标签里的id;

    至于为什么要用他们,你会用了,用多了自然就知道为什么了

    点赞 1 评论 复制链接分享
  • Bianhua_c 彼岸花_C 2017-11-29 14:05

    ioc控制反转,,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制;
    DI—Dependency Injection,即“依赖注入”, Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。

    点赞 1 评论 复制链接分享
  • yujiaao COCO_AS 2017-11-29 14:15

    网上有非常多写得很好的文章,如 http://www.cnblogs.com/0201zcr/p/4695490.html
    说说我的理解。

    从带来的好处来说:

    1、解耦,方便通过实现接口来替换(在我的项目里几乎体现不出来这个多种实现的好处,实现一个实现都不易啊)
    2、节约内存和创建时间,因为单例,因为装配时已经创建好了,不且每次运行到特定位置都创建

    坏处:
    1、程序对初学者不好理解,不易跟踪(虽然现在IDE已很好地解决了这个问题),但如果你不熟或不用
    2、程序启动时间变长,因为不管用不用到都要装配完才能启动,又常会用反射,包扫描和注解等方式,如果包名规划得不好,对大项目来说启动相当耗时
    3、程序热变更变得困难,有时改变一行代码会造成重新加载全部类,对开发很不利

    结论:适合一定规模的团队,规范性做得好的项目。

    思想很闪耀,现实有些糟

    点赞 评论 复制链接分享
  • qq_39191409 城堡里住着一只空空玄 2017-11-29 15:23

    简单讲,ioc 就是控制反转,把以前需要自己去new的对象,交给spring容器去帮你new;di就是依赖注入,帮你初始化这个对象,对象初始化后才能使用

    点赞 评论 复制链接分享
  • zyq8514700 ArthornKing 2019-08-06 22:37
    点赞 评论 复制链接分享

相关推荐