一分钟弄懂Spring @Bean @Autowired @Qualifier 的常见异常 以及命名规范

情况1:创建的bean类型和自动装配字段的类型不同-[此操作无效]
@Autowired
BCryptPasswordEncoder passwordEncoder;

@Bean
PasswordEncoder passwordEncoder() 
{
    return new BCryptPasswordEncoder();
}
情况2:创建的bean类型和自动装配字段的类型相同-[此操作无效]
@Autowired PasswordEncoder passwordEncoder;

@Bean 
PasswordEncoder passwordEncoder() 
{ 
	return new BCryptPasswordEncoder(); 
} 
情况3:自动连线字段的类型是所创建bean的超级类型-[这将起作用]

是否已创建Bean类型为BCryptPasswordEncoder-是
是否创建了类型为PasswordEncoder的bean-是

@Autowired PasswordEncoder passwordEncoder; 
@Bean 
BCryptPasswordEncoder passwordEncoder() 
{ 
	return new BCryptPasswordEncoder(); 
	} 
情况4:多个相同类型且没有@Qualifier的bean-[这将不起作用]

NoUniqueBeanDefinitionException:没有类型为’osscpPasswordEncoder’的合格bean:
预期的单个匹配bean,但找到2:bcryptPasswordEncoder,md4PasswordEncoder

@Autowired PasswordEncoder bcrypt; 
@Autowired PasswordEncoder md4; 

@Bean 
public PasswordEncoder bcryptPasswordEncoder() 
{ 
	return new BCryptPasswordEncoder(); 
} 

@Bean 
public PasswordEncoder md4PasswordEncoder() 
{ 
	return new Md4PasswordEncoder(); 
}
情况5:具有@Qualifier且具有相同类型的多个bean-[这将起作用]
@Autowired 
@Qualifier("bcryptPasswordEncoder") 
PasswordEncoder bcrypt; 

@Autowired 
@Qualifier("md4PasswordEncoder") 
PasswordEncoder md4; 

@Bean 
public PasswordEncoder bcryptPasswordEncoder() 
{ 
	return new BCryptPasswordEncoder(); 
} 

@Bean 
public PasswordEncoder md4PasswordEncoder() 
{ 
	return new Md4PasswordEncoder(); 
} 
情况6:多个类型相同且没有@Qualifier的bean,但字段名称与bean名称相同-[这将起作用]
@Autowired 
PasswordEncoder bcryptPasswordEncoder; 

@Autowired PasswordEncoder md4PasswordEncoder; 

@Bean 
public PasswordEncoder bcryptPasswordEncoder() 
{ 
	return new BCryptPasswordEncoder(); 
} 

@Bean 
public PasswordEncoder md4PasswordEncoder() 
{ 
	return new Md4PasswordEncoder(); 
} 
发布了225 篇原创文章 · 获赞 385 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_33709508/article/details/104404631