我正在学习Spring核心认证,我对Spring如何处理bean生命周期有一些疑问,特别是bean后处理器。
所以我有了这个模式:
我很清楚这意味着什么:
然后在bean创建阶段执行以下步骤:
>
每个bean都在缺省情况下被急切地实例化(按照正确的顺序创建,并注入其依赖项)。
在依赖注入之后,每个bean都会经历一个后处理阶段,在这个阶段中可能会进行进一步的配置和初始化。
>
初始化器:如果指示(即@postConstruct)初始化bean。
和所有其他内容:允许附加配置,并且可以在初始化步骤之前或之后运行
我贴出这张幻灯片:
Spring文档解释了使用BeanPostProcessor定制bean下的BPPs。BPP bean是一种特殊的bean,它先于其他bean创建,并与新创建的bean交互。有了这个构造,Spring就可以通过自己实现BeanPostProcessor
来连接和定制生命周期行为。
拥有自定义BPP(如
public class CustomBeanPostProcessor implements BeanPostProcessor {
public CustomBeanPostProcessor() {
System.out.println("0. Spring calls constructor");
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println(bean.getClass() + " " + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println(bean.getClass() + " " + beanName);
return bean;
}
}
并打印出每个创建的bean的类和bean名称。
bean将已经填充了属性值。
关于与@PostConstruct
的关系,请注意,这个注释是声明PostProcessAfterInitialization
方法的一种方便方法,当您通过注册CommonAnnotationBeanPostProcessor
或在bean配置文件中指定
时,Spring就会意识到这一点。@PostConstruct
方法是在任何其他PostProcessAfterInitialization
之前还是之后执行,取决于Order
属性
您可以配置多个BeanPostProcessor实例,并且可以通过设置order属性来控制这些BeanPostProcessor的执行顺序。
我们知道主存域很少:年轻的、终生的(旧的gen)和PermGen。 年轻领域分为伊甸园和幸存者(有两个)。 OldGen用于生存的对象。 MaxTenuringThreshold防止对象过早地被最终复制到OldGen空间。这很清楚,也很容易理解。 但是它是如何工作的呢?垃圾回收器如何处理这些在MaxTenuringThreshold之前仍然存在的对象,以何种方式?它们位于何处? 对象被复制回幸存者
这是一个简单的错误:我在对象的格式字符串中使用了而不是。但我完全困惑于我的测试结果与错误的格式字符串。 以下代码: @Jan建议依赖toString()方法可能会有问题,所以我定义了一个日期格式,以与上面相同的代码打印。下面是附加输出:
我几乎理解了尾递归是如何工作的,以及它与普通递归之间的区别。我只是不明白为什么它不要求堆栈记住它的返回地址。 在尾递归函数中调用函数本身后没有什么可做的,但对我来说这没有意义。
当我创建一个api并使用laravel资源时,是更好地获取完整的数据,然后选择在资源文件中发送哪些列,还是从数据库中选择数据时,确定应该选择哪些列? 1)
根据Javadoc关于字符串。实习生(): 调用intern方法时,如果池中已经包含一个由equals(Object)方法确定的等于此String对象的字符串,则返回池中的字符串。否则,将此String对象添加到池中并返回对此String对象的引用。 我对此没有什么问题。 当创建一个新的字符串对象(不是使用字符串文字,而是使用new()操作符)时,如:
问题内容: 在查找(测试)信息时,我遇到了一些问题,完全不知道为什么会发生。现在,我知道没有实际的理由执行此操作,这绝对是可怕的代码,但是为什么行得通呢? 因此,基本上,我将对象添加到Quods的ArrayList中。现在,我看到java如何无法有效地检查它,因为它必须浏览所有引用,而这些引用可能甚至都没有存储在任何地方。但是为什么get()起作用了。get()是否不是要返回Quod的实例,就像在