spring依赖注入方法及原理

  依赖注入就是在程序运行时期,由外部容器动态的将依赖对象注入到组件中,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做。

  spring有多种依赖注入的形式,下面仅介绍spring通过xml进行IOC配置的方式:

1.set注入

  这是最简单的注入方式,假设有一个PersonServiceBean,类中需要实例化一个PersonDao对象,那么就可以定义一个private的PersonDao成员变量,然后创建PersonDao的set方法(这是ioc的注入入口):

 1 public Class PersonServiceBean{
 2     //注入对象PersonDao
 3     private PersonDao personDao;
 4     //注入对象的setter方法
 5     public void setPersonDao(PersonDao personDao){
 6         this.personDao = personDao;
 7     }
 8     public void save(Person person){
 9         personDao.save(person);
10     }
11 }

  随后编写spring的xml文件,<bean>中的name属性是class属性的一个别名,class属性指类的全名,因为在PersonServiceBean中有一个公共属性PersonDao,所以要在<bean>标签中创建一个<property>标签指定PersonDao。<property>标签中的name就是PersonServiceBean类中的PersonDao属性名,ref指下面<bean name="personDao"...>,这样其实是spring将PersonDaoImpl对象实例化并且调用PersonServiceBean的setPersonDao方法将PersonDao注入

beans.xml配置:

1 <!--配置bean,配置后该类由spring管理-->
2 <bean name="personDao" class="cn.itcast.dao.impl.SpringDaoBean"></bean>
3 <bean name="personService" class="cn.itcast.service.impl.PersonServiceBean">
4     <!--(1)依赖注入,配置当前类中相应的属性-->
5     <property name="personDao" ref="personDao"></property>
6 </bean>

2.构造器注入

这种方式的注入是指带有参数的构造函数注入,看下面的例子,我创建了两个成员变量PersonDao和User,但是并未设置对象的set方法,所以就不能支持第一种注入方式,这里的注入方式是在PersonServiceBean的构造函数中注入,也就是说在创建PersonServiceBean对象时要将PersonDao和User两个参数值传进来:

 1 public class PersonServiceBean{
 2     private PersonDao personDao;
 3     private User user;
 4     public PersonServiceBean(PersonDao personDao,User user){
 5         this.personDao = personDao;
 6         this.user = user;
 7         system.out.println("构造方法调用personDao,user对象");
 8     }
 9     public void save(){
10         user.setName("哈哈");
11         personDao.save(user);
12     }
13 }

在XML文件中同样不用<property>的形式,而是使用<constructor-arg>标签,ref属性同样指向其它<bean>标签的name属性:

1 <!--配置bean,配置后该类由spring管理-->
2     <bean name="personService" class="cn.itcast.service.impl.PersonServiceBean">
3         <!--(2)创建构造器注入,如果主类有带参的构造方法则需添加此配置-->
4         <constructor-arg ref="personDao"></constructor-arg>
5         <constructor-arg ref="user"></constructor-arg>
6     </bean>
7         <bean name="personDao" class="cn.itcast.dao.impl.personDaoBean"></bean>
8          <bean name="user" class="cn.itcast.vo.User"></bean>
时间: 2024-08-29 21:15:08

spring依赖注入方法及原理的相关文章

编码剖析Spring依赖注入的原理

Spring的依赖注入 前面我们就已经讲过所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中. Spring的依赖注入有两种方式: 通过构造器参数,让容器把创建好的依赖对象注入. 使用setter方法进行注入. 现在我们使用第二种方式进行依赖注入.以Spring管理的Bean的生命周期的案例为基础展开本文的说明. 首先在src目录下新建一个cn.itcast.dao包,并在该包下新建一个接口——PersonDao.java,其代码为: public interface Pers

SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式

在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. Spring依赖注入(

Spring学习笔记——Spring依赖注入原理分析

我们知道Spring的依赖注入有四种方式,分别是get/set方法注入.构造器注入.静态工厂方法注入.实例工厂方法注入 下面我们先分析下这几种注入方式 1.get/set方法注入 public class SpringAction { //注入对象springDao private SpringDao springDao; //一定要写被注入对象的set方法 public void setSpringDao(SpringDao springDao) { this.springDao = spri

Spring依赖注入

Spring依赖注入基础 一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是可以专注业务逻辑.因此学习Spring Framework在架构和模式方面的结构和原理,对我们在架构和模块级别的理解帮助极大.Spring Framework(参考1)的宗旨是简化Java开发,主要的手段如下: (1)在架构上解耦:通过DI(依赖注入)管理类型依赖,通过AO

(转)Java Web系列:Spring依赖注入基础

一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是可以专注业务逻辑.因此学习Spring Framework在架构和模式方面的结构和原理,对我们在架构和模块级别的理解帮助极大.Spring Framework(参考1)的宗旨是简化Java开发,主要的手段如下: (1)在架构上解耦:通过DI(依赖注入)管理类型依赖,通过AOP分离关注点,减少重复代码

Java Web系列:Spring依赖注入基础

一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是可以专注业务逻辑.因此学习Spring Framework在架构和模式方面的结构和原理,对我们在架构和模块级别的理解帮助极大.Spring Framework(参考1)的宗旨是简化Java开发,主要的手段如下: (1)在架构上解耦:通过DI(依赖注入)管理类型依赖,通过AOP分离关注点,减少重复代码

java框架篇---spring 依赖注入

spring依赖注入的方式有4种 构造方法注入 属性注入 工厂注入 注解注入 下面通过一个实例统一讲解: User.java package com.bjsxt.model; public class User { private String username; private String password; public User(){} public User(String username, String password) { super(); this.username = use

2.Spring依赖注入(Dependency Injection)

依赖: 在A类中引用了B类,说明A依赖于B. 注入: 使用Spring框架给A类中的B对象的属性赋值. 直接上代码: 1.只使用IOC public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { retu

Spring依赖注入 --- 简单使用说明

Spring依赖注入 --- 简单使用说明 本文将对spring依赖注入的使用做简单的说明,enjoy your time! 1.使用Spring提供的依赖注入 对spring依赖注入的实现方法感兴趣的同学可以参考我的日志:http://www.cnblogs.com/kodoyang/p/Frame_Imitate_Spring.html 我们会用spring提供的ClassPathXmlApplicationContext实现来代替这篇日志中相应的实现 为导入的jar文件配置api 对应的L