spring注入之使用标签 @Autowired @Qualifier

  使用标签的缺点在于必须要有源码(因为标签必须放在源码上),当我们并没有程序源码的时候,我们只有使用xml进行配置。

例如我们在xml中配置某个类的属性

          

  1. <bean name="studentService"class="com.bjsxt.service.StudentService">
  2. <property name="studentDao"ref="stuDaoImpl"></property><!-- 普通值用value 对于特定的类的对象则用ref需要注意的是 ref需要在xml文件中进行配置-->
  3. </bean>

(1)Xml配置(添加了加下划线部分)

<?xml version="1.0"encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <context:annotation-config /><!-- 自动装配一定要加上此片段-->
  <bean name="s"class="com.bjsxt.dao.impl.StudentDaoImpl"></bean>
    <bean name="student"class="com.bjsxt.model.Student" scope="singleton" lazy-init="true"init-method="init" destroy-method="destroy"></bean>
                                                     <!--  prototype 每次生成的对象不同 prototype
                                                                            lazy-init=false 默认在容器进行初始化的时候就初始化了该对象
                                                     -->
  <bean name="studentService"class="com.bjsxt.service.StudentService">

  </bean>
</beans>

(2)类 注意在这里的两种装配方式 第一种因为破坏了封装性不建议 spring容器在进行查找时,是按照xml进行查找

packagecom.bjsxt.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

importcom.bjsxt.dao.*;
import com.bjsxt.dao.impl.*;
importcom.bjsxt.model.*;
public class StudentService {
    /*@Autowired //按照类型进行匹配
     @Qualifier("s")按照名称进行匹配    第一种表示方式放在属性名的前面
    */
privateStudentDao studentDao;
//降低了耦合性:StudentService并不知道具体由谁来保存学生s 由ioc容器来控制装配

publicStudentDao getStudentDao() {
    return studentDao;
}
@Autowired//放到set方法上
public void setStudentDao( @Qualifier("s")StudentDao studentDao) {
    this.studentDao = studentDao;
}
public void add(Student s)
{
    this.studentDao.StudentSave(s);
}
}
 
时间: 2024-10-06 15:54:07

spring注入之使用标签 @Autowired @Qualifier的相关文章

Spring @Resource,@Autowired,@Qualifier的注解注入和区别

spring2.5提供了基于注解(Annotation-based)的配置,我们可以通过注解的方式来完成注入依赖.在Java代码中可以使用 @Resource或者@Autowired注解方式来经行注入.虽然@Resource和@Autowired都可以来完成注入依赖,但它们之间是有区 别的.首先来看一下: @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入: @Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qu

spring mvc 常用注解标签详解

1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestP

Spring学习之使用标签来标记资源(@Component、@Repository、 @Service和@Controller)以及使用方式(包含如何在jsp中使用)

首先要在xml文件当中加入标下划线的部分,容器初始化时候需要扫描的包 注意: a.     扫描的包部分(下划线部分)一定要加上,默认是不会扫描所有的包的.各个包之间用','隔开.如过具有相同的父包,那么我们可以用父包来代替.如下划线部分,我们可以用com.bjsxt来代替. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.or

Spring 注入所得

Spring在注入的时候 @Autowired @Qualifier(value = "inpatientInfoInInterService") private InpatientInfoInInterService inpatientInfoInInterService; public void setInpatientInfoInInterService(InpatientInfoInInterService inpatientInfoInInterService) { this

Spring注入方式及注解配置

一:基于xml的DI(Dependency Injection) 注入类型: 定义学生Student实体类和小汽车Car实体类:进行封装和生成ToString(),并自定义属性Car Student 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 public class Student { p

Spring注解总结[email&#160;protected]和@Qualifier、@Resource

前言 由于能力有限,不会过于深入的探讨spring的注解,只会介绍一下注解的基本使用方法 @Autowired @Autowired可以帮我们注入一个属性,一般作用在普通方法之上(也可以作用的变量上或者构造器上) @Autowired是根据类型匹配的,所以如果有两个一样类型的参数的时候,会出错 看下下面的例子 public class Bean2 { @Override public String toString() { return "bean2...."; } } public

spring注入时报错::No qualifying bean of type &#39;xxx.xxMapper&#39;

做一个小项目,因为有 baseService,所以偷懒就没有写单独的每个xxService接口,直接写的xxServiceImpl,结果在service实现类中注入Mapper的时候,用的 @Autowired, 结果,junit一启动,就报错误:Java.lang.illegalStateException:Failed to load ApplicationContext 具体是在 创建bean的时候报:No qualifying bean of type 'xxx.xxMapper' ab

spring中xml配置和autowired混用

1.类的混用: 配置文件中的配置: <bean id="a" class="com.ab.cc.A" /> 类中的配置 @Autowired A a; 这样的好处,可以少掉get/set方法 [email protected]和@Resource的区别 Autowired默认是根据byType自动装配,所以有多个类型的xml或者注解某个类的时候,会报错,这时候可以再添加@Qualifier注解,指定名称.这个是spring自带的,换框架的时候,要spri

Spring注入,Ioc的具体配置

Spring框架的IOC注入: 一.Java部分代码: Person实体类: 1 package com.ioc; 2 3 import java.util.List; 4 import java.util.Map; 5 import java.util.Properties; 6 import java.util.Set; 7 8 import com.adviceAop.Dancer; 9 import com.aop.Singer; 10 11 /** 12 * Spring 各种类型的注