零件
@Component也用于
@Service并且
@Repository使用类路径扫描来自动检测和自动配置bean。
只要这些类位于我们的基本程序包中,或者Spring知道要扫描的另一个程序包,就会为每个这些类创建一个新的bean。
Bean和Component一对一映射,即每个类一个Bean。
这些注释(
@Component, @Service, @Repository)是类级别的注释。
例:
假设我们有一个UserService类,其中包含所有用于User Operation的方法。
@Servicepublic class UserService { @Autowired private UserRepository userRepository; @Override public User findByUsername( String username ) throws UsernameNotFoundException { User u = userRepository.findByUsername( username ); return u; } public List<User> findAll() throws AccessDeniedException { List<User> result = userRepository.findAll(); return result; }}Spring将为UserService创建一个Bean,我们可以在多个位置/类中使用它。
@豆
@Bean用于声明单个bean,而不是像Component那样让Spring自动执行。
它使Bean的声明与类定义脱钩,并让您完全按照自己的选择创建和配置Bean。
@Bean在方法级别使用,可以根据需要进行配置
例如:
@Configuration@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true)public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Bean public SpringTemplateEngine springTemplateEngine() { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.addTemplateResolver(htmlTemplateResolver()); return templateEngine; } @Bean public SpringResourceTemplateResolver htmlTemplateResolver() { SpringResourceTemplateResolver emailTemplateResolver = new SpringResourceTemplateResolver(); emailTemplateResolver.setPrefix("classpath:/static/template/"); emailTemplateResolver.setSuffix(".html"); emailTemplateResolver.setTemplateMode("HTML"); emailTemplateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name()); return emailTemplateResolver; }...


