spring - Spring的@Bean注解和@Component注解有什么区别?
问题描述
这对您来说可能是一个非常简单的问题。但是我阅读了很多文档,我完全感到困惑。我们可以使用@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,而不是像 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;
}
...
在此处阅读有关 Stereotype Annotations的更多信息。
推荐阅读
- python-3.x - Python Pillow - 在带有字体颜色的框架上绘制文本
- python - 缩放图像图的轴
- c++ - 为什么 cin >> ws 使程序在末尾有空格时不终止?
- python - 使用 GridSearchCV 进行逻辑回归时的精度计算警告
- excel - VBA - 即使匹配是收件箱中的第一封电子邮件,代码也需要 5 分钟以上的时间来搜索收件箱 - 我该如何加快速度?
- xml - xsl position() 总是返回“1”
- arrays - Postgres SQL:如何创建约束以检查元素不在字符串数组中
- sql - 透视连接表
- trigonometry - (wx) Maxima:重新定义用于括号的 tex,当应用指数时
- python - 在我的 Python API POST 请求中使用替换时 POST 失败