spring的注解使用,Autowired和Qualifier

本文详细解析了Spring框架中自动装配的机制及其注解的使用,包括@Autowired和@Qualifier的作用与实例,展示了如何利用这些注解进行依赖注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?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/>
     
</beans>

其中<context:annotation-config />的作用是在给Spring的容器注册了四个类,包括(AutowiredAnnotationBeanPostProcessor , CommonAnnotationBeanPostProcessor , PersistenceAnnotationBeanPostProcessor 和 RequiredAnnotationBeanPostProcessor),这几个类都是为了处理相应的注解。


(1)@Autowired

      此注解的作用是为了Spring在进行自动装配时调用的方法,可以注解在 对应属性上,对应属性的set方法上,和任意名字的方法上,可以注解多个,当存在多个此注解时,会多次调用注解了的方法。

例如:

package cn.mastery.service;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import cn.mastery.dao.BaseDao;


public class BaseService extends LifeCycle {
	@Autowired
	private BaseDao baseDao;

	public BaseDao getBaseDao() {
		return baseDao;
	}
	@Autowired
	public void setBaseDao(BaseDao baseDao) {
		this.baseDao = baseDao;
	}
	
	//调用加在此注解上的方法来动态装载,也可加在属性声明处,可不需要set和get方法
	@Autowired
	public void wired(BaseDao baseDao) {
		this.baseDao = baseDao;
	}
	
	public Boolean add(Object entity){
		System.out.println(this.baseDao);
		return baseDao.add(entity);
	}

	public Boolean update(Object entity){
		return baseDao.update(entity);
	}

	public Boolean delete(Object entity){
		return baseDao.delete(entity);
	}

	public List<Object> query(){
		return baseDao.query();
	}
	
	
}

(2)@Qualifier

      此注解的作用是为了Spring在进行自动装配时当配置xml时存在多个相同的bean时,Spring无法自动识别出调用的是哪个bean,配上这个注解可以让Spring的容器能够找到对应的bean之后赋值。

例如:

package cn.mastery.service;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import cn.mastery.dao.BaseDao;


public class BaseService extends LifeCycle {
	private BaseDao baseDao;

	public BaseDao getBaseDao() {
		return baseDao;
	}
	public void setBaseDao(BaseDao baseDao) {
		this.baseDao = baseDao;
	}
	
	//调用加在此注解上的方法来动态装载,也可加在属性声明处,可不需要set和get方法
	@Autowired
	public void wired(@Qualifier("action")BaseDao baseDao) {
		this.baseDao = baseDao;
	}
	
	public Boolean add(Object entity){
		System.out.println(this.baseDao);
		return baseDao.add(entity);
	}

	public Boolean update(Object entity){
		return baseDao.update(entity);
	}

	public Boolean delete(Object entity){
		return baseDao.delete(entity);
	}

	public List<Object> query(){
		return baseDao.query();
	}
	
	
}
xml配置如下:如上@Qualifier的后面名字是action,则Spring容器调用的是id为baseDao1的bean
<?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></context:annotation-config>

	<!-- 此配置的autowire说明是通过名字来匹配! 则匹配的是第一个bean -->
	<bean id="baseDao" class="cn.mastery.dao.impl.BaseDaoImpl">
		<qualifier value="main"></qualifier>
		<property name="daoId" value="8"></property>
		<property name="daoStatus" value="good"></property>
	</bean>

	<!-- 此配置的autowire说明是通过名字来匹配! 则匹配的是第一个bean -->
	<bean id="baseDao1" class="cn.mastery.dao.impl.BaseDaoImpl">
		<qualifier value="action"></qualifier>
		<property name="daoId" value="2"></property>
		<property name="daoStatus" value="bad"></property>
	</bean>


	<bean id="baseService" class="cn.mastery.service.BaseService">

	</bean>

	<!-- more bean definitions go here -->

</beans>


转载于:https://my.oschina.net/zouziwen/blog/713277

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值