码迷,mamicode.com
首页 > 编程语言 > 详细

spring依赖注入方法及原理

时间:2015-05-25 16:15:53      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

  依赖注入就是在程序运行时期,由外部容器动态的将依赖对象注入到组件中,通俗的理解是:平常我们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>

 

spring依赖注入方法及原理

标签:

原文地址:http://www.cnblogs.com/ckysea/p/4528033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!