Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring BeanPostProcessor中,postProcessBeforeInitialization意味着什么?_Java_Spring_Spring Mvc_Javabeans - Fatal编程技术网

Java 在Spring BeanPostProcessor中,postProcessBeforeInitialization意味着什么?

Java 在Spring BeanPostProcessor中,postProcessBeforeInitialization意味着什么?,java,spring,spring-mvc,javabeans,Java,Spring,Spring Mvc,Javabeans,在XML文件中 <bean id="triangle" class="com.company.aop.model.Triangle"> <property name="name" value="myTriangle"></property> </bean> <bean class="com.company.aop.DisplayNameBeanPostProcessor"></bean> 现在,当我运行这段代码时

在XML文件中

<bean id="triangle" class="com.company.aop.model.Triangle">
    <property name="name" value="myTriangle"></property>
</bean>

<bean class="com.company.aop.DisplayNameBeanPostProcessor"></bean>
现在,当我运行这段代码时,它将转到带有参数bean和beanName的postProcessBeforeInitialization()方法,并打印消息“myTriangle”。在我的例子中,这个bean有一些信息,比如它的name字段的值为“myTriangle”。但是方法签名说它是在初始化之前,那么如果它还没有被初始化,那么传递给它的bean是什么呢? 两者的区别是什么

public Object postProcessAfterInitialization(Object bean, String beanName) 

为什么是这条线

System.out.println("Tr "+(((Triangle) bean).getName().toString()));

如果在初始化前调用了方法,则在初始化前的方法后处理中打印名称?

您可以参考Spring文档的第5.8.1节。这里的关键点是,“postProcessBeforeInitialization”应该读作“postProcessBeforeInitializationCallback”,而“postProcessAfterInitialization”应该读作“postProcessAfterInitializationCallback”。因此,这些是由bean上的Spring容器运行before/after初始化回调后的pre和post processor。这也是这些方法的文档中传达的内容

初始化之前的对象后处理(对象bean, 字符串(beanName) 抛出BeansException

将此BeanPostProcessor应用于给定的新bean实例,然后再执行任何操作 bean初始化回调(比如初始化bean AfterPropertieSet或自定义初始化方法)。豆子已经长出来了 用属性值填充

注意,它说“bean将已经被属性值填充”。 同样地

对象后处理后初始化(对象bean, 字符串(beanName) 抛出BeansException

将此BeanPostProcessor应用于给定的新bean实例 bean初始化回调(比如初始化bean AfterPropertieSet或自定义初始化方法)。豆子已经长出来了 用属性值填充


BeanPostProcessorbean是一种特殊类型的bean,它在任何其他bean之前创建,并与新创建的bean交互。
postProcessBeforeInitialization
postProcessAfterInitialization
应用于spring创建的任何其他bean

但是方法签名说它是在初始化之前,那么如果它还没有初始化,那么传入它的bean是什么?


这里的初始化指的是调用三角bean的init方法,因此before和post调用包装了对该bean的init方法的调用。在此之前,构造函数和setter注入已经执行,这就是bean具有实际值的原因。

现在在下面的例子中,beanFactory是在参数中传递的,而函数的名称是postprocessebeanfactory,这意味着应该在这个后处理器之后初始化bean工厂<代码>公共类DisplayNameBeanPostProcessor实现beanFactory后处理器{
@Override
公共无效后处理beanFactory(ConfigurableListableBeanFactory beanFactory)
抛出BeanException{
}
public Object postProcessBeforeInitialization(Object bean, String beanName)
System.out.println("Tr "+(((Triangle) bean).getName().toString()));