组成部分
@Component
也适用于
@Service
和
@Repository
用于使用类路径扫描自动检测和自动配置bean。
只要这些类在我们的基本包下,或者Spring知道要扫描的另一个包,就会为每个类创建一个新bean
Bean和组件被映射为一对一,即每个类一个Bean。
这些注释(
@Component, @Service, @Repository
)是类级注释。
例子:
假设我们有一个UserService类,它包含用户操作的所有方法。
@Service
public 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,而不是像组件那样让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;
}
...