Spring中@Autowired和@Resource的使用

  • Post author:
  • Post category:其他




@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;
}



版权声明:本文为qq_43348552原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。