spring中通过ApplicationContext获取bean和通过bean工厂获取bean的区别

本文探讨了在Spring中通过ApplicationContext和BeanFactory获取bean的区别。使用ApplicationContext时,singleton作用域的bean会在配置时初始化,而其他作用域的bean在第一次请求时初始化。相比之下,BeanFactory在bean被请求时才进行初始化,从而节省内存但可能导致启动时速度较慢。通常情况下,由于其灵活性和预加载能力,ApplicationContext更常被使用。

直接上代码:

bean:

package com.hsp.inter;

public class UpperToLetter implements Change {
    private String str;
    
    public UpperToLetter(){
        System.out.println("正在初始化中。");
    }
    public String getStr() {
        return str;
    }
    public void setStr(String str) {
        this.str = str;
    }
    public void change() {
        System.out.println(str.toLowerCase());
    }

}


beans.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
     <bean id="change" class="com.hsp.inter.UpperToLetter">
         <property name="str" value="ADSDFS"></property>
     </bean>
</beans>


测试类:

package com.hsp.inter;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.hsp.util.ApplicationContextUtil;

public class App1 {
    public static void main(String[] args) {
        ApplicationContext ac=new ClassPathXmlApplicationContext("com/hsp/inter/beans.xml");    
    }

}





使用beanFactory获取bean的代码如下:

public class App1 {
    public static void main(String[] args) {
        //ApplicationContext ac=new ClassPathXmlApplicationContext("com/hsp/inter/beans.xml");    
        BeanFactory factory=new XmlBeanFactory(new ClassPathResource("com/hsp/inter/beans.xml"));
        factory.getBean("change");
    }

}






结论:

1:在使用上下文容器ApplicationContext获取bean的时候,并且scope="singlton"(这是缺省值),那么会在配置bean的时候就会将bean初始化:。当scope的值不是singlton的时候,在配置bean的时候不会初始化bean,只有在使用bean

的时候采用初始化bean。(缺点:耗内存 。优点:可以预先加载)

2:在使用BeanFactory获取bean的时候,配置bean的时候不会马上初始化,只有当你使用该bean的时候才会初始化。(缺点:加载数度慢。优点:节约内存。)


3:一般没有特殊要求都是使用applicationContext(90%)


































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值