Spring之Bean

作者: David_jim | 来源:发表于2017-05-01 21:26 被阅读98次

    spring 容器就是一个工厂,而bean 是工厂里的每一个产品,而这个工厂生产什么样的产品,是依赖于配置文件的声明。
    一、
    注册的方式有两种:
    1、xml配置文件

    xml配置

    2、java based 配置

    java based

    二、Bean的命名规则
    默认,spring是以@Bean声明的方法名作为bean的名称,spring容器集中管理Bean的实例化,Bean实例可以通过BeanFactory的getBean(string beanName) 方法得到。

    Bean 注解

    从上图可以看出,
    name:用于为bean指定别名,如果需要为Bean实例指定多个别名,可以在name 属性中使用逗号,冒号和空格来分隔多个别名
    autowire:是否按名称或是类型来注入依赖的对象
    initMethod: 在初始化完后,调用的方法
    destroyMethod: bean在销毁时调用的方法
    三、Bean的作用域
    通过@Scope来声明

    Scope 示例

    1、singleton:单例模式
    2、Prototype:原型模式
    3、request:对于 每次http 请求,bean都会产生一个新的实例,只有在web 应用中才会生效
    4、session 对于 每次HttpSession时会产生一个新的实例,只有在web 应用中才会生效
    5、global session ,只有在portlet context中有效
    比较常用到的是singleton和prototype,java在创建实例,要进行内存申请,销毁实例时,要垃圾回收,这些都会导致系统开销的增加,因此prototype作用域的bean在创建、销毁代价会比较大,而singleton的bean实例,一旦创建,就可以重复使用
    四、Bean的生命周期
    1、@Bean注解的内容:通过配置initMethod和destroyMethod方法
    2、bean的接口:BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口,@PostConstruct,@PreDestroy
    测试如下


    TestClass

    bean的声明:

    TestClass Bean声明

    日志输出:

    日志输出1 日志输出2

    我们来看下Bean的初始化是怎么进行的

    initializeBean 方法

    1、是调用 实现了相应Aware接口的方法

    Aware接口方法

    2、调用Bean实例的后置处理器BeanPostProcessor

    BeanPostProcessor接口

    这里有两个方法 ,Before和After....,分别在initMethod方法前后被调用


    后置处理方法

    3、调用Bean实例的InitializingBean接口和@Bean的initMethod,InitializingBean接口是优于initMethod的

    InitMethod

    4、实例销毁

    destroy 调用堆栈

    相关文章

      网友评论

        本文标题:Spring之Bean

        本文链接:https://www.haomeiwen.com/subject/bgdqtxtx.html