spring依赖注入的3种方式

spring的主要特点就是依赖注入和控制反转,那么注入的方式有多少种呢。答案是三种分别是注解,get和set方法,构造器注入,下面就来简单的说下用法。

1.最简单的是第二种,我们只需要在bean里使用properties注入进去就可以了,如

 

 
 
  1. <bean id="personManager" class="org.lxh.impl.PersonManger"> 
  2.          <property name="teacherDao" ref="teacherDao"></property> 
  3.      </bean> 

这样的话只需要在我们的bean里加入该dao的set方法就ok了,get方法要不要都可以

 

 
 
  1. private TeacherDao teacherDao; 
  2. public TeacherDao getTeacherDao() { 
  3.     return teacherDao; 
  4.  
  5. public void setTeacherDao(TeacherDao teacherDao) { 
  6.     this.teacherDao = teacherDao; 

2.构造器注入

这里需要用到一个叫constructor-arg的标签,里面的属性为index(从0开始),ref,value(注入普通变量的时候用),type(注入普通变量的时候可以不写),这里的type表示的是接口

 
 
  1. <constructor-arg index="0" type="org.lxh.dao.StudentDao" ref="dao"></constructor-arg>  

bean里面这样写就OK 了,这里要注意的是要留下默认的构造器

 

 
 
  1.  private StudentDao dao;
  2. public PersonManger() { 
  3.  
  4.  } 
  5.  public PersonManger(StudentDao dao) { 
  6. this.dao = dao; 

3.使用注解注入

使用注解的时候,需要增加下面3句,并打开那个反射节点

 
 
  1.  xmlns:context="http://www.springframework.org/schema/context" 
  2. http://www.springframework.org/schema/context 
  3. http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 

配置文件大致如下

 
 
  1. <beans xmlns="http://www.springframework.org/schema/beans" 
  2.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3.        xmlns:context="http://www.springframework.org/schema/context" 
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans 
  5.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
  6.            http://www.springframework.org/schema/context 
  7.            http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 
  8.      <context:annotation-config/> 

使用注解有2种方式分别是:自动装配,手工装配,开发中建议使用手工装配,这几个注解分别为@Resource(默认按名称装配),@Autowired(自动装配默认是按类型装配)

 

 
 
  1. // //注解注入的第一种方式 
  2.     // @Resource private StudentDao dao; 
  3.     // 
  4.     // public PersonManger() { 
  5.     // 
  6.     // } 
  7.     // public PersonManger(StudentDao dao) { 
  8.     // this.dao = dao; 
  9.     // } 
  10.     // 注解注入的第二种方式 
  11.     // private StudentDao dao; 
  12.     // 
  13.     // @Resource 
  14.     // public void setDao(StudentDao dao) { 
  15.     // this.dao = dao; 
  16.     // } 

@Service,@Controller,@Repository,@Component,目前的话四个注解spring没有做严格区分,随便用哪一个都可以,主要用于组件自动扫描,要使用这种方式就要填一个节点,使用这个节点前面的那个反射的节点就可以不用了

<context:component-scan base-package="org.lxh"></context:component-scan>

base-package配置的是基本包,这个根据实际情况作修改,之后的工作就是在需要在要交给spring管理的接口和实现类加入上面四个注解中的一个 ,这里的注解也可以配置bean的名称,名称的配置就不细说了

 

 
 
  1. package org.lxh.impl; 
  2.  
  3. import org.lxh.dao.TeacherDao; 
  4. import org.springframework.stereotype.Service; 
  5.  
  6. @Service("TeacherManager"
  7. public class TeacherManager implements TeacherDao { 
  8.  
  9.     public void tachc() { 
  10.         System.out.println("通过properties方式注入"); 
  11.     } 
  12.  
  13.  
  14. package org.lxh.dao; 
  15.  
  16. import org.springframework.stereotype.Repository; 
  17.  
  18. @Repository 
  19. public interface TeacherDao { 
  20.  
  21.     public abstract void tachc(); 
  22.  

这样的配置单元测试代码应该如下

 
 
  1. package org.lxh.test; 
  2.  
  3. import org.lxh.dao.PersonDao; 
  4. import org.lxh.dao.TeacherDao; 
  5. import org.springframework.context.ApplicationContext; 
  6. import org.springframework.context.support.AbstractApplicationContext; 
  7. import org.springframework.context.support.ClassPathXmlApplicationContext; 
  8.  
  9.  
  10. public class Testunit { 
  11.    @org.junit.Test public void  TestUse(){ 
  12.        //初始化spring容器 
  13.        //ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); 
  14.        AbstractApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); 
  15.        //取得业务bean 
  16.        TeacherDao dao=(TeacherDao)context.getBean("TeacherManager"); 
  17.        dao.tachc(); 
  18.       // dao.sayHello(); 
  19.       // context.close(); 
  20.    } 

下面是运行结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值