Spring的学习(五)——处理自动装配的歧义性

如果一个程序中有多个bean,再使用自动装配就会出现歧义性,Spring容器就不知道到底装配哪一个,下面介绍一下解决自动装配的歧义性的方法:

一、使用首选bean

使用首选bean的注解是:@Primary,只需要在声明类的时候使用@Primary就行,不过要注意的是,只能定义一个@Primary

二、使用限定符

使用限定符的注解是:@Qualifier(),只需要在声明的时候和装配的时候使用@Qualifier()就行

三、使用限定符和bean id

在声明的时候指定bean的id(默认的id是首字母小写的类名),在装配的时候使用@Qualifier()

四、使用Java标准解决

使用Java标准解决就是使用Java反射机制,只需要加@Resource(name="id"),使用Java标注的话,就不需要加@Autowired了

pom配置:

<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.3.19.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>4.3.19.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>

	</dependencies>

下面贴出代码:

public interface UserService {
	void add();
}
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import com.qfedu.demo.service.UserService;
//@Component("festival")
//@Primary
//@Qualifier("festival")
@Component
public class UserServiceFestival implements UserService {

	public void add() {
		System.out.println("注册用户并赠送优惠券!");
	}

}
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import com.qfedu.demo.service.UserService;
//@Component("normal")
//@Qualifier("normal")
@Component
public class UserServiceNormal implements UserService {

	public void add() {
		System.out.println("添加用户成功!");
	}

}
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.qfedu.demo.serviceImpl")
public class AppConfig {

}
import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.PropertySource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=AppConfig.class)
//@PropertySource("classpath:/log4j.properties")
public class UserServiceTest {
	
	
	@Autowired
	//@Qualifier("festival")
	@Qualifier("userServiceNormal")
//	@Resource(name="userServiceNormal")
	private UserService userService;

	@Test
	public void testAdd(){
		userService.add();
	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_41061437/article/details/82708479