Spring-DI控制反转和IOC依赖注入

Spring-DI控制反转和IOC依赖注入

DI控制反转实例

IDEAJ自动导入Spring框架

创建UserDao.java接口
public interface UserDao {
    public void say();
}
创建UserDaoImpl.java继承UserDao.java并重写say()方法
public class UserDaoImpl implements UserDao{
    @Override
    public void say() {
        System.out.println("i am a UserDaoImpl");
    }
}
创建SpringBean配置文件ApplicationContext.xml

这个温江,相当于花名册,Spring中的Bean全部需要在这里注册,当遇到实例化某个Bean时,只需要翻开花名册,根据它的name来获取Bean的实例。

<?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 id = "userDao"  class="UserDaoImpl"></bean>
</beans>
创建DI的测试类TestDI.java并实例化userDao对象

ApplicationContext类是Spring中的org.springframework.context.BeanFactory的子接口,是Spring中的Bean实例加工厂。

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestDI {
    ApplicationContext applicationContext =
            new ClassPathXmlApplicationContext("ApplicationContext.xml");
    UserDao userDao = (UserDao) applicationContext.getBean("userDao");
    @Test
    public void testDI() {
        userDao.say();
    }
}
测试testDI()方法

通过JUnit4运行testDI()方法,运行结果如下:

总结

控制反转(DI)本质上是一种创建实例化对象的方式,通过控制反转,程序员不需要通过new关键字来创建对象,而是直接通过对象的名字从BeanFactory的子接口ApplicationContext中取出实例化好的对象,BeanFactory本质上是Spring中容器。

依赖注入

创建UserService.java接口
public interface UserService {
    public void  say();
}
创建UserServiceImpl.java继承UserService.java并重写say()方法
public class UserServiceImpl implements UserService{
    @Override
    public void say() {
        System.out.println("i am a UserServiceImpl !");
    }
}
UserServiceImpl.java中声明UserDao对象,并生成setUserDao()方法注入UserDao对象
public class UserServiceImpl implements UserService{

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void say() {
        userDao.say();
        System.out.println("i am a UserServiceImpl !");
    }
}
ApplicationContext.xml文件中配置UserServiceImpl
<?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 id = "userDao"  class="UserDaoImpl"></bean>
       <!-- 将id为uerDao的Bean实例注入到userService实例中 -->
       <bean id = "userService" class="UserServiceImpl" >
              <!-- property标签调用userService实例中的setUserDao方法实现依赖注入 -->
              <property name="userDao" ref="userDao"></property>
              <!-- name属性表示userService实例中的属性名称,
                   ref属性表示userService实例中的属性值 -->
       </bean>
</beans>
创建IOC的测试类TestIOC.java并实例化userService对象
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestIOC {

    ApplicationContext applicationContext =
            new ClassPathXmlApplicationContext("ApplicationContext.xml");
    UserService userService = (UserService) applicationContext.getBean("userService");
    @Test
    public void testIOC() {
        userService.say();
    }
}
测试testIOC()方法

总结

UserServiceImpl.java里实例化UserDao对象作为它的属性,UseServiceImpl.javaUserDaoImpl.java产生依赖关系。通过setUserDao()方法将userDao对象注入就叫做依赖注入。

原文地址:https://www.cnblogs.com/2sheep2simple/p/10804848.html

时间: 2024-12-11 04:20:53

Spring-DI控制反转和IOC依赖注入的相关文章

SSH学习八 Spring框架 -- 控制反转实现Ioc

Spring的核心是控制反转(IoC)和面向切面(AOP)控制反转--Spring通过一种称作控制反转(IoC)的技术促进了低耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JNDI相反--不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它. (以上来自百度百科 http://baike.baidu.com/link?url=_egsZcZDKcHvLJtDqFTZIR3e6lH1G-p

Spring的控制反转(IOC)和依赖注入(DI)详解

首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应用转移到了外部容器,控制权的转移就是反转 示例代码如下: public class PersonServiceBean{ private PersonDao personDao = new <strong><span style="color:#FF0000;">PersonDaoImpl</span></

spring.net (1) 概念-控制反转(又名依赖注入)

Spring .net 作为一个应用程序框架,在构建企业级.net应用程序提供了很多灵活而又丰富的功能(如:依赖注入,aop,数据访问抽象,asp.net 扩展). 控制反转: Inversion of Control:简称IoC :是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup).通过控制反转,对象在被创建的时候,由一个调控系统

Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)

一.思想理解 Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运行.Spring将各层的对象以松耦合的方式组织在一起,Action对象无须关心Service对象的具体实现,Service对 象无须关心持久层对象的具体实现,各层对象的调用完全面向接口.当系统需要重构时,代码的改写量将大大减少. 上面所说的一切都得宜于Spring的核心机制,依赖注入.依赖注入让bean与

spring(3)------控制反转(IOC)/依赖注入(DI)

一,spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理. 所谓的"控制反转"概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器. 没有控制反转这种模式前,你创建一个对象,在什么地方用,你得单独通过关键字new出来用, 但现在可以不用这样,你把new对象的权利交给spring配置文件,通过配置文件来'new', 就是权利的反转,你以前干的事

Spring入门--控制反转(IOC)与依赖注入(DI)

    1.控制反转(Inversion of Control)与依赖注入(Dependency Injection) 控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理.所谓的"控制反转"概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器. IoC是一个很大的概念,可以用不同的方式来实现.其主要实现方式有两种:<1>依赖查找(Dependency Lookup)

依赖注入(DI)和控制反转(IOC)

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinniansh

Spring3(一) 控制反转(IoC)和依赖注入(DI)

几个常用框架之间的关系 1       spring框架概述 1.1   什么是spring Spring是一个开源.轻量级的Java 开发框架.框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架.Spring的核心是控制反转(IoC)和面向切面(AOP). 轻量级指的是:与EJB对比,依赖资源少,销毁的资源少. 分层: 一站式,每一个层都提供了解决方案:但是又可以只选择其中一层 web层:struts,spring-MVC se

PHP控制反转(IOC)和依赖注入(DI)

先看一个例子: <?php class A { public $b; public $c; public function A() { //TODO } public function Method() { $this->b=new B(); $this->c=new C(); $this->b->Method(); $this->c->Method(); //TODO } } class B { public function B() { //TODO } pu