Spring中@Autowired和@Resource的使用

@Autowired的自动装配

@Autowired默认是根据类型注入的,Springboot启动时会根据配置匹配注入Bean,该注解中有一个参数required,表示是否开启自动装配,默认为true,改成false则不进行自动装配。
如下图:在需要注入的bean的实现类中加上@Controller、@Service、@Component、@Repository等注解,没有加上会自动装配失败。

public interface IUserService {
	
}
@Service
public class UserServiceImpl implements IUserService{
	
}
public class UserController {
	@Autowired
	IUserService iUserService;
}
有多个相同类型时

如果我们在其他包下面再建一个名为UserServiceImpl2的类并实现IUserService,此时使用@Autowired注解就会报错,因为找到了两个相同类型的Bean,不知道该注入哪一个。此时可以使用@Qualifier注解按名称进行自动装配,如下图:

public interface IUserService {
	
}
@Service
public class UserServiceImpl implements IUserService{
	
}
@Service
public class UserServiceImpl2 implements IUserService{
	
}
public class UserController {
	@Autowired
	@Qualifier("UserServiceImpl")
	IUserService iUserService;
}

那么除了@Qualifier注解还有没有其他方式解决呢?有的,还可以使用@Primary注解,如果自动装配时有多个Bean,那么带有@Primary注解的会做为自动装配的值,如下图:

public interface IUserService {
	
}
@Service
@Primary
public class UserServiceImpl implements IUserService{
	
}
@Service
public class UserServiceImpl2 implements IUserService{
	
}
public class UserController {
	@Autowired
	IUserService iUserService;
}
@Resource注解自动装配

@Resource注解最常用两个参数name和type,其中name指定名称,type指定类型。如果都没填则使用默认名称。如下图:@Resource没有指定参数,默认会找到userServiceImpl类自动装配。

public interface IUserService {
	
}
@Service
public class UserServiceImpl implements IUserService{
	
}
@Service
public class UserServiceImpl2 implements IUserService{
	
}
public class UserController {
	@Resource
	IUserService userServiceImpl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值