这对你来说可能是一个非常简单的问题。但是我读了很多文档,我完全困惑了。我们可以使用@Component代替@Bean或@Bean代替@Component(以及@Repository @Service @ Controller )?
干杯
请您参考如下方法:
组件
@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
用于声明单个 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;
}
...
了解有关刻板印象注释的更多信息 here .