bean的生命周期
spring bean存活于容器之中,一般情况下spring bean对context的情况并不了解,如果希望某个bean知道自己在context中的代号:bean name,即可让该bean的类型实现beannameaware接口。
该实例的运行结果如下:
bean name就是一个bean在容器中的id,上述例子对应的xml文件内容如下:
在生产环境中我还没有用过这个接口,不过查看spring的源码可知,一般用于显示bean的相关信息,因此在我们这个例子中我也重写了tostring方法。查看abstractview类的代码可知,spring中有类似的用法:
其他几个xxxaware接口的作用也类似,在此不做赘述。
如果说上述几个xxxaware接口的作用是定制单个bean的初始化过程,那么beanpostprocessor接口则可以提供全局的、定制多个bean的初始化过程。beanpostprocessor接口有两个方法:postprocessbeforeinitialization()在bean的属性值设置之前执行;postprocessafterinitialization在bean的属性值设置之后执行。
如果希望在bean的属性值被设置之后还想做点工作,则可以考虑让这个bean实现initializingbean接口。initializingbean接口中的方法afterpropertiesset()可以实现所需要的工作。
在bean的声明周期中,afterpropertiesset()方法的调用介于postprocessbeforeinitialization()方法和postprocessafterinitialization()方法之间。
在实际项目中,可以考虑按照如下模式使用initializingbean接口: