首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring -是像@Component BeanPostProcessors这样的注释

Spring -是像@Component BeanPostProcessors这样的注释
EN

Stack Overflow用户
提问于 2021-01-24 13:17:34
回答 2查看 489关注 0票数 0

我读到了类似于“自动头发”、“事务式& @PostConstruct”之类的Spring注释是/使用BeanPostProcessors的一种形式。因此,根据我对BeanPostProcessors的了解,它们用于管理Spring的生命周期。这意味着您可以指定应该在bean不化之前或之后运行的任何代码。

现在,像@Component或@Bean这样的注释指定给Spring,它应该创建这种类型的Bean。例如,

代码语言:javascript
运行
复制
@Component
public Class Foo {

}

会告诉spring创建一个类型为"Foo“的Bean,然后Spring将管理它的生命周期。那么,这是否构成了@Component和@Bean BeanPostProcessors呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-24 14:00:28

我读过像@Autowired@Transactional@PostConstruct这样的Spring注释是/使用BeanPostProcessors的一种形式。

两者都不是,实际上正好相反。是BeanPostProcessors在查找注释并作出相应的反应。

  • 自动标注字段、setter方法和任意配置方法的AutowiredAnnotationBeanPostProcessor - BeanPostProcessor实现。这些要注入的成员是通过注释来检测的:默认情况下,Spring的@Autowired@Value注释。 如果可用的话,也支持JSR-330的@Inject注释,作为Spring自己的@Autowired的直接替代。
  • 支持通用CommonAnnotationBeanPostProcessor注释的BeanPostProcessor实现,特别是javax.annotation包中的JSR-250注释。许多Java 5技术(例如JSF1.2)以及Java 6的JAX都支持这些常见的Java注释。 该后处理器包括对PostConstructPreDestroy注释的支持--分别作为init注释和销毁注释--通过使用预先配置的注释类型从InitDestroyAnnotationBeanPostProcessor继承。

注意,@Transactional不是由BeanPostProcessor处理的。

现在,像@Component@Bean这样的注释指定给Spring,它应该创建这种类型的bean。..。那么,这是否意味着@Component@Bean BeanPostProcessors?

不是的。

@Component是组件扫描框架为查找要注册的bean而寻找的注释。组件扫描框架还查找本身带有@Component注释的注释,例如@Configuration@Controller@Service@Repositiory注释。

然后,@Bean注释由BeanDefinitionRegistryPostProcessor (而不是BeanPostProcessor)处理。

  • ConfigurationClassPostProcessor - BeanFactoryPostProcessor,用于引导@Configuration类的处理。 这个post处理器是优先级排序的,因为在Bean类中声明的任何@Configuration方法在执行任何其他BeanFactoryPostProcessor之前都必须注册其相应的bean定义。
票数 2
EN

Stack Overflow用户

发布于 2021-01-24 13:41:25

不!它们是不同的。

  1. BeanPostProcessor用于在创建bean之前和之后执行一些操作,这允许我们在创建bean之前和之后添加一些代码。

BeanPostProcessor类有两种方法。

  • postProcessBeforeInitialization:它用于确保在初始化之前执行所需的操作。例如,您希望从远程源/服务加载某些属性文件/读取数据。
  • postProcessAfterInitialization:在给应用程序提供bean引用之前,它处理初始化后想要完成的任务。

有关详细信息,请参阅:spring-doc-beans-customizing-using-BeanPostProcessor接口。

  1. @Component:它是最通用的Spring注释。

在类路径扫描期间,可以找到一个用@Component修饰的Java类,并在上下文中注册为Spring。

详细信息请参阅:spring component-注释

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65870992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档