依赖注入(DI)背后的基本原理是对象之间的依赖关系(即一起工作的其它对象)。因此,容器的工作就是创建bean时注入那些依赖关系。相对于由bean自己来控制其实例化、直接在构造器中指定依赖关系或者类似服务定位器(Service Locator)模式这3种自主控制依赖关系注入的方法来说,控制从根本上发生了倒转,这也正是控制反转(Inversion of Control, IoC) 名字的由来。
setter注入是spring根据配置文件自动完成的,你不需要在程序中显示的调用,因此代码没有与spring框架直接耦合。
而通过getBean方法则首先意味着你必须获取到BeanFactory或ApplicationContext,这种方式叫依赖查找,代码了解框架的存在,耦合度较高。
应用DI原则后,代码将更加清晰。而且当bean自己不再担心对象之间的依赖关系(甚至不知道依赖在哪里定义和依赖的实际类)之后,实现更高层次的松耦合将易如反掌。DI有三种注入方式,即Setter注入(*.这个是最重要和最主要的,企业用的最多且最灵活的)、构造器注入和接口注入。
项目源码是接http://moshowgame.iteye.com/admin/blogs/1605087的。但是只有一个地方改了(就是UserService里面加了个默认构造函数),但是总体结构没变。这里只讲解XML,前面的model、DAO、DAO.impl和service就不再重复说了。
*。在bean.xml配置setter注入和constructor注入
<?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="userDAOImpl" class="com.bjsxt.dao.impl.UserDAOImpl">
</bean>
<bean id="userService" class="com.bjsxt.service.UserService">
<!-- setter设置注入就是调用setXXX方法,但是需要保留默认构造方法-->
<!--
<property name="userDAO" ref="userDAOImpl" />
-->
<!-- constructor构造注入调用的是构造方法-->
<!--
<constructor-arg index="0">
<ref bean="userDAOImpl"/>
</constructor-arg>
-->
</bean>
</beans>
*。上面两种方法写在一起了,要用的方法请取消掉<!-- -->的注释,然后将另外的方法用<!-- -->注释掉。
*。注入的思路。等于就是说从UserDAOImpl中new一个UserDAO的实例userDAO,然后注入到UserService里面的setter或constructor里面。用spring的方式讲就是参考bean获得实例然后注入到目标bean里面去,即是要用到两个bean。
*。常见错误1。用setter设置注入需要保留默认构造方法,不然会报错,我就是这样错了一个下午,问大神才知道的。
public UserService() {}
用constructor构造注入需要重写构造方法并且带参数 public UserService(UserDAO userDAO) {
super();
this.userDAO = userDAO;
}
*。常见错误2。<property name="userDAO"..这里的userDAO名字要和public UserService(UserDAO userDAO)的userDAO一致,才能确认不会注入错,下午也因为这个错了。
*。很多东西刚开始觉得很难,学过了之后、练过了之后、错过了之后才明白,其实很简单。
⊙_⊙最后,按照我的惯例,附上本次的项目源码,类库用到三个(spring.jar junit.jar(eclipse自带) commons-logging.jar)。
^_^还有什么好方法或者疑问和意见欢迎大家提出来一起讨论!
分享到:
相关推荐
总结来说,Spring的setter和构造注入是实现依赖注入的关键技术,它们提供了灵活且强大的方式来管理对象间的依赖关系,从而提高代码的可维护性和测试性。在实际项目中,开发者可以根据需求和场景选择合适的注入方式。
Spring 框架基于这些知识点,为我们提供了两种注入方式:setter 注入和构造器注入。 二、setter 注入 setter 注入是指通过 setter 方法将依赖对象注入到 Bean 中。例如,在 BookServiceImpl 中定义了引用类型属性 ...
Spring之Construcotrer注入和setter注入不同的XML写法方式 ,具体效果和过程看博文http://blog.csdn.net/evankaka/article/details/44878225
本资料主要关注两种注入方式:设值注入(Setter Injection)和构造注入(Constructor Injection),并通过XML配置文件进行管理。 设值注入是通过setter方法来注入依赖的。首先,我们需要在类中声明需要注入的属性,...
在Spring框架中,setter注入是一种常见的依赖注入方式,它允许我们通过setter方法来设置对象的属性,从而实现组件之间的解耦。本篇文章将详细讲解如何使用setter注入来实现与MySQL数据库的连接。 首先,我们需要...
在实际开发中,开发者可以根据需求选择使用setter注入、构造函数注入或者字段注入。setter注入的灵活性在于可以在不改变对象实例的情况下,动态地调整其依赖,这对于测试和维护来说非常方便。同时,它也鼓励了接口...
9. **工具使用**:"工具"标签可能暗示博主分享了一些有助于理解和调试setter注入的工具或技巧,比如使用Spring的BeanDefinitionViewer,或者IDE中的调试功能。 综上所述,这篇博客可能涵盖了Spring中setter注入的...
标题中的“spring介绍(set和构造器注入)”是指在Spring框架中两种主要的依赖注入(Dependency Injection,简称DI)方式:setter注入和构造器注入。在Spring框架中,DI是一种核心特性,它允许我们解耦组件之间的关系...
本教程将指导你如何搭建Spring环境,并实现设置注入和构造注入。 首先,让我们理解什么是Spring框架。Spring是一个开源的Java平台,主要用于构建企业级应用。它提供了全面的编程和配置模型,极大地简化了JavaEE应用...
本篇将重点讲解Spring中的IOC,特别是setter注入的原理和使用。 **IOC原理** IOC的核心思想是将对象的创建和管理交给一个专门的容器,即Spring的IOC容器。在传统的编程中,我们通常手动创建对象并管理它们之间的...
下面我们将详细探讨Spring 中的三种注入方式:接口依赖注入(Type1)、setter/getter 注入(Type2,也称为属性注入)和构造方法注入(Type3)。 1. **接口依赖注入(Type1)** 这种注入方式相对不常见,主要适用于...
Spring提供了多种注入方式,包括set注入、构造注入和自动注入,让我们逐一深入探讨。 1. **Set注入** Set注入是最常见的注入方式,它通过setter方法来设置对象的依赖。首先,你需要在类中声明需要注入的属性,并...
本篇文章将深入探讨Spring框架中的setter注入,以及如何通过XML配置文件进行相关设置。 首先,我们要理解什么是依赖注入(Dependency Injection,简称DI)。在面向对象编程中,对象之间存在依赖关系,依赖注入就是...
在Spring中,依赖注入主要有三种方式:构造器注入、setter注入和接口注入。构造器注入是在对象实例化时通过构造函数传入依赖;setter注入则是通过调用对象的setter方法来设置依赖;接口注入则相对较少使用,它通过...
在Spring中,依赖注入可以通过构造器注入、设值注入和接口注入三种方式实现。 1. 构造器注入:通过在类的构造函数中传递依赖对象来完成注入。这种方式在创建对象时就确保了所有依赖都已就绪,适合于对象的依赖关系...
本文将详细探讨Spring中的两种主要注入方式:构造器注入和setter注入,以及它们各自的特点和适用场景。 首先,让我们理解什么是依赖注入(Dependency Injection,简称DI)。在传统的编程模式中,一个类通常会直接...
显式装配是指在Spring配置文件中明确指定如何注入依赖,包括setter注入和构造器注入,这种方式虽然配置繁琐,但清晰明了,易于管理和维护。在Spring Boot中,尽管自动化配置十分便捷,但仍然可以通过@Primary、@...
Spring支持通过属性值、构造器参数、setter方法等多种方式进行注入。 6. **运行环境与构建工具**: 题目描述中提到的运行环境是Eclipse,这是一个流行的Java集成开发环境,提供了便捷的代码编辑、调试等功能。而...
Spring框架提供了两种主要的DI方式:构造器注入和setter注入。 1. **构造器注入**: 当类需要依赖其他对象时,Spring可以通过构造函数传递这些依赖。这样,每次创建类的新实例时,依赖项都会自动设置。例如: ``...