美文网首页
Bean的常用配置

Bean的常用配置

作者: 杨凯飞 | 来源:发表于2018-06-06 15:45 被阅读0次

id和name

    般情况下,装配一个Bean时,通过指定一个id属性作为Bean的名称

    id属性在ioc容器中必须是唯一的

    如果Bean的名称中含有特殊字符,就需要使用name属性

class

    class用于设置一个类的完全路径名称,主要作用是ioc容器生成类的实例

    创建的类是单例还是多例通过scope属性来确定

scope

代码实现,首先先建立一个类(我的是Person类),之后配置bean。

<bean id="person" class="com.jiaoshou.ioc.demo3.Person"/>

默认的为singleton

开始测试代码如下

public void demo3() {

    ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

    Person person1=(Person)applicationContext.getBean("person");

    Person person2=(Person)applicationContext.getBean("person");     System.out.println(person1);

    System.out.println(person2);

}

我们需要打印一下这两个类的地址值是否相同,进人判断是单例模式还是多例模式

打印结果

singleton的结果

修改配置信息

<bean id="person" class="com.jiaoshou.ioc.demo3.Person" scope="prototype"/>

修改为多例模式

打印结果

prototype打印结果

                                Bean的生命周期

Spring初始化bean或销毁bean时,有时需要做一-些处理工作,因此spring可以在创建和销毁bean的时候调用bean的两个生命周期方法。

<bean id="xxx" class="xxx" init-method="init" destory-method="destroy"/>

init-method里面的值是被初始化的时候要执行的方法

destory-method里面的值是对象被销毁时执行的方法

注意:初始化方法和销毁方法,要求scope="singleton"单例模式,因为非单利模式不知道什么时候才要执行初始化方法或者销毁方法

Spring容器中Bean的生命周期

11个过程

    1. instantiate bean对象实例化(当被实例化的时候执行)

    2. populate properties封装属性(设置属性)

<property name="name" value="叫兽"/>

    3.如果Bean实现BeanNameAware执行setBeanName

先实现BeanNameAware接口,下面是方法

public void setBeanName(String s) {

    System.out.println("第三步:设置Bean的名称"+name);

}

    4.如果Bean实现BeanFactoryAware或者ApplicationContextAware设置工厂setBeanFactory或者上下文对象setApplicationContext

继承ApplicationContextAware接口

public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

    System.out.println("第四部:了解工厂信息");

}

    5.如果存在类实现BeanPostProcessor (后处理Bean) , 执行postProcessBeforeInitialization

在配置的时候只需要class,因为在生成实例化的时候自动调用,不需要在其它地方调用

<bean class="com.jiaoshou.ioc.demo3.MyBeanPostProcessor"/>

public class MyBeanPostProcessor implements BeanPostProcessor {

    //初始化前的方法

    public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {

        System.out.println("第五步:初始化前方法");

        return o;

    }

}

    6.如果Bean实现InitializingBean执行afterPropertiesSet

实现InitializingBean接口

public void afterPropertiesSet() throws Exception {

    System.out.println("第六步:属性设置后");

}

    7.调用<bean init-method="xxx">指定初始化方法xxx

    8.如果存在类实现BeanPostProcessor (处理Bean) , 执行postProcessAfterInitialization

<bean class="com.jiaoshou.ioc.demo3.MyBeanPostProcessor"/>

public class MyBeanPostProcessor implements BeanPostProcessor {    

    //初始化后的方法

    public Object postProcessAfterInitialization(Object o, String s) throws BeansException {

        System.out.println("第八步:初始化后方法");

        return o;

    }

}

    9.执行业务处理

    10.如果Bean实现DisposableBean执行destroy

实现DisposableBean接口

public void destroy() throws Exception {

    System.out.println("第十步:执行Spring的销毁方法");

}

    11.调用<bean destroy-method="xxx">指定销毁方法xxx

相关文章