Spring Annotation(@Autowire、@Qualifier)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans
 3     xmlns="http://www.springframework.org/schema/beans"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 6     xmlns:p="http://www.springframework.org/schema/p"
 7     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
 8
 9     <context:annotation-config />
10     <bean id="userDao" class="com.bxw.dao.impl.UserDaoImpl" />
11     <bean id="userService" class="com.bxw.service.UserService" lazy-init="true" scope="singleton" init-method="init" destroy-method="destroy"/>
12
13 </beans>

applicationContext.xml

xmlns(xml命名空间):其实就是指定该xml的格式,能够用哪些标签。

需要添加xmlns:context="http://www.springframework.org/schema/context"

和xsi:schemaLocation中添加

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"

applicationContext.xml需要添加<context:annotation-config />,这会初始化4个用来处理一些注解的bean

 1 package com.bxw.service;
 2
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.beans.factory.annotation.Qualifier;
 5
 6 import com.bxw.dao.UserDao;
 7 import com.bxw.dao.impl.UserDaoImpl;
 8 import com.bxw.po.User;
 9
10 public class UserService {
11     private UserDao userDao = new UserDaoImpl();
12
13     public void init() {
14         System.out.println("init...");
15     }
16
17     public UserDao getUserDao() {
18         return userDao;
19     }
20
21     @Autowired
22     public void setUserDao(@Qualifier("userDao") UserDao userDao) {
23         this.userDao = userDao;
24     }
25
26     public void add(User u){
27         this.userDao.save(u);
28     }
29
30     public void destroy() {
31         System.out.println("destroy...");
32     }
33
34 }

UserService.java

@Autowire一般注解在set方法上,会采用bytype的方式注入(虽然它可以注解在各种方法甚至是成员变量上,但不常用)

采用bytype方式注入会发生一些问题,例如如果配置了名字(id)不同但class相同的两个bean,这个时候将会报错,采用@Qualifier解决。

@Qualifier可以在bean中进行配置,如果没有配置的且指定了该bean的id,则id值即为qualifier的默认值。(这也解释了UserService.java中为什么是@Qualifier("userDao")).

时间: 2024-10-24 00:07:03

Spring Annotation(@Autowire、@Qualifier)的相关文章

Spring Annotation(@resource、@component)

1 package com.bxw.dao.impl; 2 3 import org.springframework.stereotype.Component; 4 5 import com.bxw.dao.UserDao; 6 import com.bxw.po.User; 7 8 @Component("userDao") 9 public class UserDaoImpl implements UserDao { 10 public void save(User u){ 11

Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier 解析

URL:http://www.ulewo.com/user/10001/blog/273 我们在使用spring的时候经常会用到这些注解,那么这些注解到底有什么区别呢.我们先来看代码 同样分三层来看: Action 层: package com.ulewo.ioc; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @Co

Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier、@scope

以下内容摘自部分网友的,并加上了自己的理解 @Service用于标注业务层组件(我们通常定义的service层就用这个) @Controller用于标注控制层组件(如struts中的action.Spring MVC中的Controller) @Repository用于标注数据访问组件,即DAO组件 @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注. 这几个注解是当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),

详解@Autowired、@Qualifier和@Required

A.@Autowired org.springframework.beans.factory.annotation.Autowired public @interface Autowired Marks a constructor, field, setter method or config method as to be autowired by Spring's dependency injection facilities. 标注一个构造函数,字段,setter方法或者配置方法,让它通过

Spring注解@Component、@Repository、@Service、@Controller区别

Spring注解@Component.@Repository.@Service.@Controller区别 Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层.业务层和控制层(Web 层)相对应.虽然目前这 3 个注释和 @Comp

Spring注解@Component、@Repository、@Service、@Controller的相关知识

Spring注解@Component.@Repository.@Service.@Controller区别 spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层.业务层和控制层(Web 层)相对应.虽然目前这 3 个注释和 @Comp

【j2ee spring】12、整合SSH框架(终结版)

[j2ee spring]12.整合SSH框架(终结版) 最后,我们把整个项目的截图,代码发一下,大家不想下载那个项目的话,可以在这里看到所有的代码(因为那个项目需要一个下载积分,真不多= =,我觉得我搞了那么久,收点积分应该不过分吧...嘿嘿) 这里,我尽量用截图来搞,免得复制粘贴,怪烦的 一.项目整体截图 二.开始全部代码 Person.java Person.hbm.xml PersonService.java package cn.cutter_point.service; import

Unit06: Spring对JDBC的 整合支持 、 Spring+JDBC Template、Spring异常处理

Unit06: Spring对JDBC的 整合支持 . Spring+JDBC Template .Spring异常处理 1. springmvc提供的异常处理机制 我们可以将异常抛给spring框架,让spring来帮我们处理异常. (1)使用简单异常处理器 step1. 配置简单异常处理器. step2. 添加对应的异常处理页面. 注:该方式只适合处理简单异常的处理,如果要对异常做复杂处理,比如 记录日志等,则不合适了. (2)使用@ExceptionHandler注解 step1. 在处理

Spring中的注解 @Qualifier

在使用Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Bean 时,Spring 容器将抛出 BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean. Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称,这样歧义就消除了,可以通过下面的方法解决异常. @Qualifier("XXX")