我读到了类似于“自动头发”、“事务式& @PostConstruct”之类的Spring注释是/使用BeanPostProcessors的一种形式。因此,根据我对BeanPostProcessors的了解,它们用于管理Spring的生命周期。这意味着您可以指定应该在bean不化之前或之后运行的任何代码。
现在,像@Component或@Bean这样的注释指定给Spring,它应该创建这种类型的Bean。例如,
@Component
public Class Foo {
}会告诉spring创建一个类型为"Foo“的Bean,然后Spring将管理它的生命周期。那么,这是否构成了@Component和@Bean BeanPostProcessors呢?
发布于 2021-01-24 14:00:28
我读过像
@Autowired、@Transactional和@PostConstruct这样的Spring注释是/使用BeanPostProcessors的一种形式。
两者都不是,实际上正好相反。是BeanPostProcessors在查找注释并作出相应的反应。
AutowiredAnnotationBeanPostProcessor - BeanPostProcessor实现。这些要注入的成员是通过注释来检测的:默认情况下,Spring的@Autowired和@Value注释。
如果可用的话,也支持JSR-330的@Inject注释,作为Spring自己的@Autowired的直接替代。CommonAnnotationBeanPostProcessor注释的BeanPostProcessor实现,特别是javax.annotation包中的JSR-250注释。许多Java 5技术(例如JSF1.2)以及Java 6的JAX都支持这些常见的Java注释。
该后处理器包括对PostConstruct和PreDestroy注释的支持--分别作为init注释和销毁注释--通过使用预先配置的注释类型从InitDestroyAnnotationBeanPostProcessor继承。注意,@Transactional不是由BeanPostProcessor处理的。
现在,像
@Component或@Bean这样的注释指定给Spring,它应该创建这种类型的bean。..。那么,这是否意味着@Component和@BeanBeanPostProcessors?
不是的。
@Component是组件扫描框架为查找要注册的bean而寻找的注释。组件扫描框架还查找本身带有@Component注释的注释,例如@Configuration、@Controller、@Service和@Repositiory注释。
然后,@Bean注释由BeanDefinitionRegistryPostProcessor (而不是BeanPostProcessor)处理。
ConfigurationClassPostProcessor - BeanFactoryPostProcessor,用于引导@Configuration类的处理。
这个post处理器是优先级排序的,因为在Bean类中声明的任何@Configuration方法在执行任何其他BeanFactoryPostProcessor之前都必须注册其相应的bean定义。发布于 2021-01-24 13:41:25
不!它们是不同的。
BeanPostProcessor用于在创建bean之前和之后执行一些操作,这允许我们在创建bean之前和之后添加一些代码。BeanPostProcessor类有两种方法。
postProcessBeforeInitialization:它用于确保在初始化之前执行所需的操作。例如,您希望从远程源/服务加载某些属性文件/读取数据。postProcessAfterInitialization:在给应用程序提供bean引用之前,它处理初始化后想要完成的任务。有关详细信息,请参阅:spring-doc-beans-customizing-using-BeanPostProcessor接口。
@Component:它是最通用的Spring注释。在类路径扫描期间,可以找到一个用@Component修饰的Java类,并在上下文中注册为Spring。
详细信息请参阅:spring component-注释。
https://stackoverflow.com/questions/65870992
复制相似问题