bean 标签
作用:
用于配置对象让 spring 来创建的。
默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。

创建Bean的三种方式


模拟表现层的代码


public class Client {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        IAccountService accountService = (IAccountService) ac.getBean("accountService");
        System.out.println(accountService);
    }
}


第一种方式:使用默认构造函数创建。 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。 采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。


<bean id="accountService" class="com.tiger.impl.AccountServiceImpl"></bean>


第二种方式: 当我们使用jar包中的类无法修改它源码时,(没有默认构造函数,使用某个类中的方法创建对象,并存入spring容器)


/**
 * 模拟一个工厂类(该类可能是存在于jar包中的,我们无法通过修改源码的方式来提供默认构造函数)
 */
public class InstanceFactory {

    public IAccountService getAccountService(){
        return new AccountServiceImpl();
    }
}
<bean id="instanceFactory" class="com.tiger.factory.InstanceFactory"></bean>
    <bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>


第三种方式:使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)


/**
 * 模拟一个工厂类(该类可能是存在于jar包中的,我们无法通过修改源码的方式来提供默认构造函数)
 */
public class StaticFactory {

    public static IAccountService getAccountService(){

        return new AccountServiceImpl();
    }
}
<bean id="accountService" class="com.tiger.factory.StaticFactory" factory-method="getAccountService"></bean>

bean的作用范围调整


bean标签的scope属性: 作用:用于指定bean的作用范围 取值: 常用的就是单例的和多例的 singleton:单例的(默认值) prototype:多例的 request:作用于web应用的请求范围 session:作用于web应用的会话范围 global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,它就是session


bean对象的生命周期


单例对象 出生:当容器创建时对象出生 活着:只要容器还在,对象一直活着 死亡:容器销毁,对象消亡 总结:单例对象的生命周期和容器相同 多例对象 出生:当我们使用对象时spring框架为我们创建 活着:对象只要是在使用过程中就一直活着。 死亡:当对象长时间不用,且没有别的对象引用时,由Java的垃圾回收器回收