Spring - BeanFactory 新旧工厂差异

本文通过在Service实现类中使用静态代码块的方式,演示了Spring框架中新旧Bean工厂在加载Bean时的不同行为。新工厂(ApplicationContext)会在加载配置文件时即完成Bean的实例化,而旧工厂(BeanFactory)则采用延迟加载机制。

在将要被加入到spring容器中的service中,添加static静态代码块(加载类时被调用),用于判断spring中新旧bean工厂的加载性质。

package com.witwicky.service.impl;

import com.witwicky.service.UserService;

public class UserServiceImpl implements UserService {

	static{
		System.out.println("init...");
	}
	
	@Override
	public void hello() {
		System.out.println("hello");
	}

}

 

package spring;

import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;

import com.witwicky.service.UserService;
import com.witwicky.service.impl.UserServiceImpl;

public class Demo1 {
	@Test
	public void run1() {
		UserService us = new UserServiceImpl();
		us.hello();
	}
	
	/**
	 * 新工厂,当spring核心配置文件被加载完成时,其中配置的bean就已经被实例化
	 */
	@Test
	public void run2() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//		UserService us = (UserService) ctx.getBean("userService");
//		us.hello();
	}
	
	/**
	 * 旧工厂,延迟加载,只有在获取bean工厂里的对象时,才会被实例化。
	 */
	@Test
	public void run3() {
		BeanFactory bf = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
//		UserService us = (UserService) bf.getBean("userService");
//		us.hello();
	}
}

 

当run2执行时(注释掉后两行代码),控制台会打印初始化信息。

当run3执行时(注释掉后两行代码),控制台并不会打印初始化信息,而将后两行代码开启时,则初始化信息与打印信息一同输出。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值