`

五 依赖注入

 
阅读更多
五 依赖注入
1>set注入方式
1 对象注入 
先看接口 PersonDao.java
package cn.itcast.service;

public interface PersonDao {

	public void add();

}

PersonService
package cn.itcast.service;

public interface PersonService {

	public void save();

}


实现类 
PersonDaoBean.java

package cn.itcast.service.impl;

import cn.itcast.service.PersonDao;

public class PersonDaoBean implements PersonDao {
    /* (non-Javadoc)
	 * @see cn.itcast.service.impl.PersonDao#add()
	 */
    public void add(){
    	System.out.println("我是PersonDaoBean里的add方法");
    }
}

PersonServiceBean.java
package cn.itcast.service.impl;

import cn.itcast.service.PersonDao;
import cn.itcast.service.PersonService;

public class PersonServiceBean implements PersonService {
    private PersonDao persondao;
	public PersonDao getPersondao() {
		return persondao;
	}
	public void setPersondao(PersonDao persondao) {
		this.persondao = persondao;
	}
	public void save(){
		System.out.println("我是在PersonServiceBean中的save()方法");
		persondao.add();
	}
	public void init(){
		System.out.println("我是在PersonServiceBean中的初始化的方法");
	}
	public void destroy(){
		System.out.println("我是在PersinServiceBean中的释放资源的方法");
	}
}




配置文件 
<?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-2.5.xsd">
      <!-- 依赖对象 -->
      <!-- 方式一 set方法注入  -->
      <!--  
      <bean id="persondao" class="cn.itcast.service.impl.PersonDaoBean"></bean>    
      <bean id="personservice" class="cn.itcast.service.impl.PersonServiceBean" init-method="init" destroy-method="destroy">
      <property name="persondao" ref="persondao"></property>
      </bean>
      -->
      
        <!-- 方式二(使用内部bean,但该bean不能被其他bean使用) -->
        <bean id="personservice" class="cn.itcast.service.impl.PersonServiceBean" init-method="init" destroy-method="destroy">
        <property name="persondao">
        <bean class="cn.itcast.service.impl.PersonDaoBean"></bean>
        </property>
        </bean>
</beans>


执行代码
AbstractApplicationContext tx=new ClassPathXmlApplicationContext("beans.xml");
PersonService personservie=(PersonService)tx.getBean("personservice");
personservie.save();
tx.close();

2 基本类型数据注入


<bean id="personservice" class="cn.itcast.service.impl.PersonServiceBean" init-method="init" destroy-method="destroy">
 <property name="persondao">
 <bean class="cn.itcast.service.impl.PersonDaoBean"></bean>   
 </property>
  <!-- 基本类型数据注入 -->
  <property name="name" value="itcast"></property>   
 </bean>


 实现类修改
 package cn.itcast.service.impl;

import cn.itcast.service.PersonDao;
import cn.itcast.service.PersonService;

public class PersonServiceBean implements PersonService {
    private PersonDao persondao;
    private String name;
	public PersonDao getPersondao() {
		return persondao;
	}
	public void setPersondao(PersonDao persondao) {
		this.persondao = persondao;
	}
	public void save(){
		System.out.println("我是在PersonServiceBean中的save()方法");
		System.out.println("name="+name);
		persondao.add();
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void init(){
		System.out.println("我是在PersonServiceBean中的初始化的方法");
	}
	public void destroy(){
		System.out.println("我是在PersinServiceBean中的释放资源的方法");
	}
}

测试 
AbstractApplicationContext tx=new ClassPathXmlApplicationContext("beans.xml");
PersonService personservie=(PersonService)tx.getBean("personservice");
personservie.save();
tx.close();


3 集合属性注入
Set集合属性注入
 <!-- 集合注入 -->
         <property name="set">
         <set>
         <value>第一个</value>
         <value>第二个</value>
         <value>第三个</value>
         </set>
         </property>
         <property name="list">
         <list>
           <value>list集合1</value>
           <value>list集合2</value>
           <value>list集合3</value>
         </list>
         </property>
         <property name="p">
         <props>
         <prop key="who is he?">我是谁</prop>
         <prop key="do you know">你懂吗</prop>
         <prop key="that's goodidear">好主意</prop>
         </props>
         </property>
         <property name="map">
         <map>
         <entry key="xuchunrong" value="许春荣"></entry>
         <entry key="huhuan" value="huhuan"></entry>
         <entry key="nihao" value="李好"></entry>
         </map>
         </property>




2>构造器注入方式
1 利用构造器注入方式注入属性和对象值
配置
  <bean id="persondao" class="cn.itcast.service.impl.PersonDaoBean"></bean>
          <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">
          <constructor-arg index="0" ref="persondao"></constructor-arg>
          <constructor-arg index="1" value="xuchunrong"></constructor-arg>
</bean>

接口
package cn.itcast.service;

public interface PersonDao {

	public void add();

}


package cn.itcast.service;

public interface PersonService {

	public void save();

}


实现类
package cn.itcast.service.impl;

import cn.itcast.service.PersonDao;

public class PersonDaoBean implements PersonDao {
    /* (non-Javadoc)
	 * @see cn.itcast.service.impl.PersonDao#add()
	 */
    public void add(){
    	System.out.println("我是PersonDaoBean里的add方法");
    }
}




package cn.itcast.service.impl;

import cn.itcast.service.PersonDao;
import cn.itcast.service.PersonService;

public class PersonServiceBean implements PersonService {
    private PersonDao persondao;
    private String name;
	public void save(){
		System.out.println("我是save()方法");
		this.persondao.add();
		System.out.println("name----------->"+name);
		
	}
	public PersonServiceBean(PersonDao persondao, String name) {
		this.persondao = persondao;
		this.name = name;
	}

}



测试类
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
PersonService personService = (PersonService)ctx.getBean("personService");
personService.save();


3>使用Field注入(用于注解方式)

 

分享到:
评论

相关推荐

    依赖注入那些事儿

    ### 依赖注入那些事儿 #### 1. IGame游戏公司的故事 ##### 1.1 讨论会 IGame是一家专注于开发动作角色扮演游戏的游戏公司。这类游戏通常包含一个基础功能——打怪,即玩家通过攻击怪物来获得经验值、虚拟货币和...

    一个轻量级的PHP依赖注入框架

    依赖注入(Dependency Injection,简称DI)是一种设计模式,它在软件工程中被广泛应用于解耦组件,提高代码的可测试性和可维护性。在PHP世界里,依赖注入框架可以帮助开发者更方便地管理类之间的依赖关系,减少硬...

    c# 依赖注入 控制反转

    ### C# 依赖注入 控制反转 #### 一、IoC(控制反转)简介 IoC,即"Inversion of Control"(控制反转),是软件工程领域的一个重要概念,特别是面向对象编程中的一个关键设计原则。从字面上理解,IoC指的是程序运行...

    C++ 依赖注入

    C++依赖注入是一种设计模式,它对于简化软件设计、控制依赖关系、降低耦合度、提高代码的内聚度以及方便进行单元测试具有重要作用。依赖注入的核心思想是将依赖对象的创建和使用分离,通过第三方(例如容器)在对象...

    C# (.NET Core 6.0) DI依赖注入 示例

    较为框架式的演示了DI服务依赖注入 适用于熟悉C#中的继承,基本的Core命令使用等. 该示例演示了以服务器集群为背景的各种业务的依赖注入. 示例来自于B站杨中科老师的.NET Core(6.0)教学.

    IoC 依赖注入 技术总结

    "IoC 依赖注入 技术总结" IoC 依赖注入技术是软件设计中的一种重要技术,旨在解决软件系统中的耦合问题。该技术的核心思想是将被调用构件实例化,并注入到调用构件之中,以实现软件系统的高内聚、低耦合。IoC 依赖...

    模仿Spring依赖注入

    五、依赖注入的优点 1. **松耦合**:降低了对象之间的依赖关系,使得代码更容易理解和维护。 2. **可测试性**:依赖注入使得我们可以轻松地替换依赖,方便进行单元测试。 3. **灵活性**:通过调整容器配置,可以...

    PHP依赖注入容器库

    在IT行业中,依赖注入(Dependency Injection,简称DI)是一种设计模式,它有助于提高代码的可测试性、可维护性和灵活性。PHP作为一个广泛用于Web开发的动态类型语言,也有许多优秀的依赖注入容器库来支持这一模式。...

    spring依赖注入底层详解

    Spring依赖注入是Spring框架的核心特性之一,它极大地简化了Java应用程序的开发,使得对象之间的依赖关系得以解耦,提高了代码的可测试性和可维护性。本文将深入探讨Spring依赖注入的底层实现机制。 首先,我们要...

    spring学习:依赖注入的几种方式讨论

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本文将深入探讨Spring中的依赖注入实现方式,以及如何通过样例文件...

    Spring Ioc 注解 依赖注入

    ### Spring IoC与注解依赖注入详解 #### 一、Spring框架简介 Spring框架是由Rod Johnson创建的一个开源项目,最初是为了解决企业级应用开发中的复杂性问题而诞生的。Spring框架的核心特性包括IoC(Inversion of ...

    Angular6依赖注入Demo

    这个“Angular6依赖注入Demo”显然提供了关于如何在Angular6应用中使用依赖注入的实际示例,同时也包含了懒加载(Lazy Loading)的实现,这有助于提高应用程序的性能,因为只有在用户实际需要时才会加载特定模块。...

    .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

    最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中,但是在服务调用的时候总是获取到最后注入的那个方法的实现,这...

    php依赖注入demo

    依赖注入的核心思想是,一个对象不应该负责创建或查找它所依赖的对象,而是应该由外部源(如容器或框架)来提供这些依赖。这样可以减少类之间的耦合,使得代码更加灵活和易于测试。在PHP中,我们通常通过构造函数、...

    第三章 Spring4 依赖注入

    【标题】"第三章 Spring4 依赖注入"深入解析 在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种核心的设计模式,它允许我们创建松耦合的代码,提高软件的可测试性和可维护性。Spring4版本进一步优化...

    spring依赖注入

    Spring依赖注入是Spring框架的核心特性之一,它使得对象之间的依赖关系得以解耦,增强了代码的可测试性和可维护性。依赖注入(Dependency Injection,简称DI)的理念是,一个对象不应该负责寻找并创建它所依赖的对象...

    反射与依赖注入DEMO

    在编程领域,反射和依赖注入是两种非常重要的概念,它们都是高级编程技术,可以极大地提升代码的灵活性和可维护性。下面将详细讲解这两个概念及其在实际应用中的DEMO示例。 **反射** 反射是Java(以及其他一些面向...

    依赖注入概念

    #### 五、依赖注入在.NET中的应用 在.NET平台中,依赖注入的应用非常广泛。例如,在ASP.NET Core框架中,依赖注入是内置的特性之一。开发者可以通过简单的配置即可使用依赖注入。 1. **配置依赖注入** 在`...

    Spring 核心机制(依赖注入)

    #### 五、依赖注入的实现方式 依赖注入主要有两种实现方式:设值注入(Setter Injection)和构造注入(Constructor Injection)。 ##### 5.1 设值注入 设值注入是指通过setter方法传入被调用者的实例。这种方式简单...

Global site tag (gtag.js) - Google Analytics