我已经阅读了Spring关于BeanPostProcessor的文档,以及与之相关的现有stackoverflow帖子。我可以理解BeanPostProcessor有两种方法postprocessinessafterinitialization
和postprocessinessafterinitialization
。而postProcessBeforeInitialization在初始化Springbean之后调用,在调用init()方法之前调用,postProcessAfterInitialization在init()之后调用。然而,关于它的行为,我有几个问题。
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/BeanPostProcessor.html
我已经编写了2个POJO类,1个主类,1个自定义BeanPost处理器类和1个Spring bean xml文件。
public class HelloWorld{
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
public void init() {
System.out.println("I am init");
}
public void destroy() {
System.out.println("I am destroy");
}
}
波乔
public class NewHelloWorld{
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("NewHelloWorld Your Message : " + message);
}
}
主类
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
((AbstractApplicationContext)context).registerShutdownHook();
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
NewHelloWorld newObj = (NewHelloWorld) context.getBean("newHelloWorld");
}
}
自定义BeanPost处理器
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class DemoBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException {
System.out.println(arg1 + ": I am executing immediately after init method");
return arg0;
}
@Override
public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException{
System.out.println(arg1 + ": I am executing after spring bean initialization but before init method");
return arg0;
}
}
Beans Xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="helloWorld" class="com.HelloWorld" init-method="init" destroy-method="destroy">
<property name="message" value="helloworld-bean" />
</bean>
<bean id="newHelloWorld" class="com.NewHelloWorld">
<property name="message" value="NewHelloworld-bean" />
</bean>
<bean class="com.tutorialspoint.DemoBeanPostProcessor" />
</beans>
问题#1
:-无论我在POJO中编写的init和destroy方法是什么,BeanPostProcessor都会在bean实例化之后执行。在这种情况下,当定义声明它将在init方法之前和之后执行时,定义如何成立,因为我没有一个POJO的init,但它仍然会被执行。
问题#2
:在BeanPostProcessor的方法中,我们有一些逻辑,比如连接到远程数据库、执行一些jms队列等。我们不希望在每个bean之后执行这些逻辑。在这种情况下,我们应该有一些机制,使BeanPostProcessor不在bean之后运行。如何才能做到这一点。如果无法实现,那么在现实世界的用例中,我们通常在BeanPostProcessor方法中编写什么样的操作?
BeanPostProcessor的主要思想是配置bean。常见的用例是用代理封装注释了特定注释的bean。如果您有一些逻辑,比如执行jms队列,那么最好创建单独的bean,并在@PostConstruct方法中执行此逻辑。
我有以下场景。 一个类,其中我有一个API,其内容如下: 这里我们有一个MyOtherClass,它包含一个执行某些操作的API decodeAndGetName()。它在另一个包中,我无法修改它的代码。 要求 我需要为上面的编写一个jUnit测试。现在我想以某种方式模拟的对象并模拟的返回值。 我无法做到这一点,因为我们有一个新的MyOtherClass(),一旦流到达这一行,它就会创建一个新实例
问题内容: 由于不是可重入的,因此在信号处理程序中使用它并不安全。但是我看过很多使用这种方式的示例代码。 所以我的问题是:我们什么时候需要避免在信号处理程序中使用,并且有推荐的替代品吗? 问题答案: 您可以使用一些标志变量,在信号处理程序中设置该标志,并在正常操作期间基于main()或程序其他部分中的该标志调用函数。 从信号处理程序中调用所有函数(例如)是不安全的。一种有用的技术是使用信号处理程序
我想在这个导航用例中避免这种情况:A- 其中所有片段实例都保存在后栈中。原因:避免内存溢出错误。 我尝试创建一个自己的导航工作流,如下所述:https://stackoverflow.com/questions/18041583/fragments-backstack-issue?noredirect=1#comment26393904_18041583(它应该模仿活动行为,在开始一个新操作后调用
本文向大家介绍Spring实战之Bean的后处理器操作示例,包括了Spring实战之Bean的后处理器操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Spring实战之Bean的后处理器操作。分享给大家供大家参考,具体如下: 一 配置文件 二 接口 Axe Person 三 Bean Chinese SteelAxe 四 Bean后处理器 五 测试结果 Spring实例化主调bea
我需要一些帮助来了解spark如何决定分区的数量,以及它们在executors中是如何处理的,我很抱歉这个问题,因为我知道这是一个重复的问题,但即使在阅读了许多文章后,我仍然不能理解我正在放上一个我目前正在工作的真实生活用例,以及我的Spark提交配置和集群配置。 我的硬件配置: < code>3节点计算机,总Vcores=30,总内存=320 GB。 我正在使用spark dataframe J
我要的是这种行为: 当然,当我打印时真正发生的是: 显然,它们在类中共享数据。我如何获得单独的实例来实现我想要的行为?