`
在水伊方
  • 浏览: 110575 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Spring依赖注入的方式

阅读更多

Spring依赖注入的方式:

 

1、构造函数注入

顾名思义,构造函数注入,就是我们依靠类的构造函数来达到DI(依赖注入)的目的,每个参数代表着一个依赖,如下所示:

package org.spring.service;

public interface PersonService {
	public void showMessage();
}

 

package org.spring.service.impl;

import org.spring.dao.PersonDAO;
import org.spring.service.PersonService;

public class PersonServiceBean implements PersonService {
	private PersonDAO personDAO;

	private String message;

	public PersonServiceBean(PersonDAO personDAO, String message) {
		this.personDAO = personDAO;
		this.message = message;
	}

	public void showMessage() {
		System.out.println(message);
		personDAO.add();
	}
}

 

上面的PersonDAO接口如下

package org.spring.dao;

public interface PersonDAO {
	public void add();
}

 

PersonDAO接口的实现类

package org.spring.dao.impl;

import org.spring.dao.PersonDAO;

public class PersonDAOBean implements PersonDAO {
	public void add() {
		System.out.println("执行PersonDAOBean中的增加方法!");
	}
}

 

配置文件

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

	<bean id="personDAOBean" class="org.spring.dao.impl.PersonDAOBean" />

	<bean id="personServiceBean" class="org.spring.service.impl.PersonServiceBean"
		scope="prototype">
		<constructor-arg index="0" ref="personDAOBean" />
		<constructor-arg index="1" value="message" />
	</bean>

</beans>  

 

index属性用来显示指定构造构造参数的索引,通过使用索引属性不但可以解决多个简单属性的混淆问题,还可以解决有可能有相同类型的2个构造参数的混淆问题了,注意index是从0开始。但是当使用简单类型时,Spring将无法知道该值的类型,不借助其他帮助,它将无法仅仅根据参数类型进行匹配,比如下面的这个例子:

public class ExampleBean {   
    private int age;   
    private String name;   
  
    public ExampleBean(int age, String name) {   
        this.age= age;   
        this.name= name;   
    }   
}

  

<bean id="exampleBean" class="examples.ExampleBean">  
  <constructor-arg type="int" value="18"/>  
  <constructor-arg type="java.lang.String" value="zhangsan"/>  
</bean>

 

测试类

package org.spring;

import org.junit.Test;
import org.spring.service.PersonService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
	@Test
	public void test() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"spring.xml");

		PersonService personService = (PersonService) ctx
				.getBean("personServiceBean");
		
		personService.showMessage();

	}
}

 

控制台结果

 

2、Setter注入:

通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现基于setter的DI

 

此时PersonServiceBean类修改如下

package org.spring.service.impl;

import org.spring.dao.PersonDAO;
import org.spring.service.PersonService;

public class PersonServiceBean implements PersonService {
	private PersonDAO personDAO;
	private String message;

	public void showMessage() {
		System.out.println(message);
		personDAO.add();
	}

	public PersonDAO getPersonDAO() {
		return personDAO;
	}

	public void setPersonDAO(PersonDAO personDAO) {
		this.personDAO = personDAO;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
}

 

PersonServiceBean中省略了默认的构造器,如果还有其他带参数的构造器,则需要显示的定义默认的构造器,否则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-2.5.xsd">

	<bean id="personDAOBean" class="org.spring.dao.impl.PersonDAOBean" />

	<bean id="personServiceBean" class="org.spring.service.impl.PersonServiceBean"
		scope="prototype">
		<property name="personDAO" ref="personDAOBean" />
		<property name="message" value="message" />
	</bean>

</beans>  

 

测试类不变

控制台打印结果

可以得知,通过Setter注入方式成功

  • 大小: 1.4 KB
1
1
分享到:
评论

相关推荐

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

    Spring Boot引入了一种更智能的依赖注入方式——自动配置。自动配置是通过`@EnableAutoConfiguration`注解启动的,它根据项目中的类路径和特定条件自动配置Bean。例如,如果类路径下存在`MongoClient`的jar,Spring ...

    spring依赖注入底层详解

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

    spring依赖注入的实现原理

    二、Spring依赖注入的实现方式 1. **setter方法注入**:Spring通过调用对象的setter方法来设置其依赖的实例。在bean配置文件中,使用`&lt;property&gt;`标签指定依赖属性。 2. **构造器注入**:Spring可以通过调用带有多...

    spring依赖注入三种方式 测试源码

    本文将深入探讨Spring中的三种依赖注入方式,并结合源码分析其工作原理。 1. **构造器注入** 构造器注入是通过构造函数来传递依赖对象的。当创建一个类的新实例时,Spring容器会调用带有所需参数的构造函数,从而...

    spring依赖注入

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

    java中spring依赖注入的简单例子

    javaEE 开发中 现在最成熟的框架之一应该就是spring了 spring框架最强大的地方就是实现了依赖注入 也叫控制反转 最近的一个项目中用的就是 spring框架 spring框架是工厂模式的应用结合了MVC的设计思想 大家可以...

    Spring学习笔记(6)----编码剖析Spring依赖注入的原理

    本篇学习笔记将深入剖析Spring依赖注入的原理,通过源码分析帮助我们理解这一核心机制。 首先,依赖注入允许我们解耦组件之间的关系,使得各个组件可以独立地进行开发、测试和维护。在Spring中,DI主要通过两种方式...

    Spring 三种依赖注入方式.doc

    Spring 三种依赖注入方式 Spring 框架中提供了多种依赖注入方式,其中最常用的三种依赖注入方式分别是接口注入、设值注入和构造函数注入。下面,我们将分别对这三种依赖注入方式进行详细的介绍和分析。 一、接口...

    模仿Spring依赖注入

    【Spring依赖注入详解】 在Java开发中,Spring框架以其强大的依赖注入(Dependency Injection,简称DI)功能而闻名。依赖注入是一种设计模式,它允许我们解耦组件,使我们的应用程序更加灵活,易于测试和维护。本篇...

    Spring依赖注入检查.

    Spring依赖注入是Spring框架的核心特性之一,它极大地简化了Java应用程序的开发,使得对象之间的依赖关系得以解耦,提高了代码的可测试性和可维护性。本文将深入探讨Spring依赖注入的概念、工作原理以及如何在实际...

    Spring依赖注入——java项目中使用spring注解方式进行注入.rar

    在Java开发领域,Spring框架是应用最广泛的轻量级框架之一,它提供了强大的依赖注入(Dependency Injection,简称DI)功能,极大地简化了组件之间的耦合。本知识点将深入探讨Spring框架如何通过注解方式实现依赖注入...

    如何实现Spring依赖注入 AOP.rar

    Spring框架是Java开发中广泛应用的一个轻量级容器,它的核心特性是依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect Oriented Programming,简称AOP)。这两个特性极大地简化了Java应用程序的开发和...

    spring依赖注入例子

    通过这种方式,Spring的依赖注入帮助我们实现了低耦合,使得`UserService`只关注业务逻辑,而不关心数据访问的具体实现。这提高了代码的可读性、可测试性和可维护性。 在提供的`springDemo`压缩包中,可能包含了...

    spring依赖注入bean

    **Spring 依赖注入 (DI) 与 Bean** Spring 框架的核心特性之一就是依赖注入(Dependency Injection,简称 DI),这是一种设计模式,它允许我们控制组件之间的耦合,而不是让组件自行创建它们所依赖的对象。这有助于...

    Spring Ioc 注解 依赖注入

    随着Spring框架的发展,除了XML配置之外,Spring还引入了注解的方式来简化依赖注入的过程。下面介绍几种常用的依赖注入相关的注解: - **@Component**:用于标记一个普通的Java类为Spring管理的Bean。 - **@Service...

    Spring依赖注入使用构造设注入demo

    本篇将详细讲解如何使用构造器注入作为Spring依赖注入的一种方式,并通过一个完整的可运行示例——"SpringIOCTest2"来加深理解。 首先,理解依赖注入的概念。依赖注入允许我们不在类内部创建对象,而是通过外部源...

    Spring依赖注入使用setter设注入demo

    在这个名为“Spring依赖注入使用setter设注入demo”的示例中,我们将深入探讨如何通过setter方法实现Spring的依赖注入。 首先,理解依赖注入的基本思想:对象之间的依赖关系不是由对象自身管理,而是由外部容器(在...

    Spring三种注入方式(三)

    本篇主要介绍Spring中的三种注入方式,包括构造器注入、设值注入和接口注入。 **一、构造器注入** 构造器注入是通过构造函数来传递依赖对象的一种方式。当类有多个构造函数时,Spring会使用带有最多参数的构造函数...

Global site tag (gtag.js) - Google Analytics