我读到了类似于“自动头发”、“事务式& @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
和@Bean
BeanPostProcessors?
不是的。
@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
复制相似问题