Spring Ioc

所谓控制反转,即将传统的需要代码进行的操作,交由Spring容器来做。下面以添加book为例进行比较一下:
BookService.java

public interface BookService {
    void addBook();
}

BookServiceImpl .java

public class BookServiceImpl implements BookService {
    @Override
    public void addBook() {
        System.out.println("add book by ioc");
    }

}

Spring 配置文件

<?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">

<!-- bean definitions here -->
<bean id="bookService" class="[包名].bookServiceImpl"></bean>
</beans>

测试:

public class TestIoc {

    @Test
    public void demo01(){
        //传统方法
        BookService bookService= new bookServiceImpl();
        bookService.addBook();
    }

    @Test
    public void demo02(){
        //从spring容器获得
        //1 获得容器
        ApplicationContext applicationContext =
                                new ClassPathXmlApplicationContext("com/spring/ioc/beans.xml");

        //2获得内容 --不需要自己new,都是从spring容器获得
        BookService bookService= (BookService ) applicationContext.getBean("bookService");
        bookService.addBook();
    }

}

DI(Dependency Injection)

has a:有一个,成员变量,依赖。
class B {
private A a; //B类依赖A类
}
依赖:一个对象需要使用另一个对象
注入:通过setter方法进行另一个对象实例设置。
举例如下:

public interface BookDao {
    void save();
}
public class BookDaoImpl implements BookDao{
    @Override
    public void save(){
        System.out.println("DI -> add a book");
    }
}
public interface BookService {
    void addBook();
}
public class BookServiceImpl implements BookService {
    private BookDao bookDao;

    public void setBookDao(BookDao bookDao){
        this.bookDao=bookDao;
    }

    @Override
    public void addBook() {
        this.bookDao.save();
    }

}
public class TestDI {

    @Test
    public void demo01(){
        String xmlPath = "com/*/spring/ioc2/beans.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        BookService bookService = (BookService) applicationContext.getBean("bookService");
        bookService.addBook();
    }
}
<?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执行过程
        创建service实例:BookService bookService = new BookServiceImpl() IoC  <bean>
        创建dao实例:BookDao bookDao = new BookDaoImpl()         IoC
        将dao设置给service:bookService.setBookDao(bookDao);     DI   <property>

        <property> 用于进行属性注入
            name: bean的属性名,通过setter方法获得
            ref :另一个bean的id值的引用
     -->

<bean id="bookService" class="[包名].BookServiceImpl">
    <property name="bookDao" ref="bookDao"></property>
</bean>

<bean id="bookDao" class="[包名].BookDaoImpl"></bean>
</beans>

大家有兴趣也可以关注我的公众号查看文章。

Spring IoC与DI(依赖注入)的更多相关文章

  1. 初识Spring框架实现IOC和DI(依赖注入)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...

  2. Spring IOC - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签

    1. IOC - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交 由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周 ...

  3. Spring 05: 用DI(依赖注入)优化Spring接管下的三层项目架构

    背景 用注解改造前面Spring博客集里(指 Spring 02)Spring接管下的三层项目架构 对前面Spring博客集里(指 Spring 04)@Controller + @Service + ...

  4. Spring IOC - 控制反转(依赖注入) - 配置初始化和销毁的方法

    在Spring中如果某个bean在初始化之后,或销毁之前要做一些额外操作可以为该bean配置初始化和销毁的我方法,在这些方法中完成需要的功能. 实验: 通过断点调试模式,测试初始化方法和销毁方法的执行 ...

  5. Spring IOC - 控制反转(依赖注入) - 懒加载机制

    懒加载机制 Spring默认会在容器初始化的过程中,解析xml,并将单例的bean创建并保存到map中,这样的机制在bean比较少的时间问题不大,但一旦bean非常多时,Spring需要在启动的过程中 ...

  6. Spring IOC - 控制反转(依赖注入) - 单例和多例

    Spring容器管理的bean在默认情况下是单例的,即一个bean只会创建一个对象,存在map中,之后无论获取多少次该bean,都返回同一个对象. Spring默认采用单例方式,减少了对象的创建,从而 ...

  7. Spring IOC - 控制反转(依赖注入) - 创建对象的方式

    a.通过类的无参构造方法创建对象 在入门案例中就是这种方式.当用最普通的方式配饰一个<bean>时,默认就是采用类的 无参构造创建对象.在Spring容器初始化时,通过<bean&g ...

  8. Spring控制反转与依赖注入(IOC、DI)

    IOC: 反转控制   Inverse Of Control DI:依赖注入 Dependency Injection 目的:完成程序的解耦合 解释:在应用系统的开发过程中,有spring负责对象的创 ...

  9. 一) Spring 介绍、IOC控制反转思想与DI依赖注入

    一.spring介绍1.IOC反转控制思想(Inversion of Control)与DI依赖注入(Dependency Injection)2.AOP面向切面的编程思想与动态代理3.作用:项目的粘 ...

  10. 回客科技 面试的 实现ioc 容器用到的技术,简述BeanFactory的实现原理,大搜车面试的 spring 怎么实现的依赖注入(DI)

    前言:这几天的面试,感觉自己对spring 的整个掌握还是很薄弱.所以需要继续加强. 这里说明一下spring的这几个面试题,但是实际的感觉还是不对的,这种问题我认为需要真正读了spring的源码后说 ...

随机推荐

  1. [Xcode 实际操作]六、媒体与动画-(12)检测UIView动画的结束事件:反转动画并缩小至不可见状态

    目录:[Swift]Xcode实际操作 本文将演示UIView视图反转动画的制作,并检测其动画结束事件. 即视图在进行反转动画的同时,将移动到目标位置,并缩小至不可见状态. 在项目导航区,打开视图控制 ...

  2. jsp网站访问次数统计

    JSP 点击量统计 有时候我们需要知道某个页面被访问的次数,这时我们就需要在页面上添加页面统计器,页面访问的统计一般在用户第一次载入时累加该页面的访问数上. 要实现一个计数器,您可以利用应用程序隐式对 ...

  3. JS中substr与substring的区别

    js中substr和substring都是截取字符串中子串,非常相近,可以有一个或两个参数. 语法:substr(start [,length]) 第一个字符的索引是0,start必选 length可 ...

  4. P2184 贪婪大陆 树状数组

    树状数组帅炸了....又被一道水题轻虐,又被学长指出了一个错误....我太菜了QAQ 开两个树状数组,一个记录左端点,一个记录右端点: 共有cnt(总数) - (<l的右端点数目) - (> ...

  5. 得到web.xml中servletContext的context-param

    import org.springframework.web.context.ContextLoader; // web.xml文件中已经启用数据权限 String enableDataSecurit ...

  6. java实现access数据上传

    一. --springMvc实现上传 https://blog.csdn.net/qian_ch/article/details/69258465 --转换成spring64位上传 https://b ...

  7. Java中List,Set和Map详解及其区别和使用场景(转)

    https://www.cnblogs.com/EasonJim/p/7967138.html

  8. 【转】如何学习Javascript

    首先要说明的是,咱现在不是高手,最多还是一个半桶水,算是入了JS的门. 谈不上经验,都是一些教训. 这个时候有人要说,“靠,你丫半桶水,凭啥教我们”.您先别急着骂,先听我说. 你叫一个大学生去教小学数 ...

  9. AnyCAD OpenSource 版本下载和编译

    下载: SVN下载地址:https://anycad.svn.codeplex.com/svn 或者直接下载:http://anycad.codeplex.com/SourceControl/late ...

  10. Linux mount实际使用

    查看所有文件系统(设备):fdisk -l 1.当要重新挂载一个文件系统时(设备):可以直接 #mount -o remount,rw /dev/sdb9/(文件系统) /mnt/sdb9/(目录) ...