Spring框架:Bean的三种装配方式

一、
Bean的装配 Bean的装配,即Bean对象的创建。
1 默认装配方式(构造方式)
2 动态工厂Bean
3 静态工厂Bean
二、代码实现

appilcationContext.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"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!--构造方式-->
	<bean id="someServiceImpl" class="com.facai.service.Impl.SomeServiceImpl"></bean>
	<!-- 动态工厂:注册工厂 -->
	<bean id="serviceFactory" class="com.facai.service.factory.ServiceFactory"></bean>
	<!-- 从工厂中获取someServiceImpl的bean对象 -->
	<bean id="someServiceImpl2" factory-bean="serviceFactory" factory-method="getSomeService"></bean>
	
	<!-- 静态工厂获取 -->
	<bean id="staticSomeServiceImpl" class="com.facai.service.factory.ServiceFactory" factory-method="getStaticSomeService"></bean>
</beans>

工厂方法

package com.facai.service.factory;

import com.facai.service.SomeService;
import com.facai.service.Impl.SomeServiceImpl;

public class ServiceFactory {
	//动态工厂创建bean方法
	public SomeService getSomeService() {
		SomeService service=new SomeServiceImpl();
		return service;
	}
	//静态工厂创建bean方法
		public static SomeService getStaticSomeService() {
			SomeService service=new SomeServiceImpl();
			return service;
		}
}

测试类

@Test
	public void someTest1() {
		//创建容器对象,ApplicationContext初始化时,所有的容器中的bean创建完毕
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
		SomeService service=ac.getBean("staticSomeServiceImpl", SomeService.class);
		service.doSome();
	}

BeanFactory和ApplicationContext获取bean对象的区别

@Test
	public void someTest1() {
		//创建容器对象,ApplicationContext初始化时,所有的容器中的bean创建完毕
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
		SomeService service=ac.getBean("staticSomeServiceImpl", SomeService.class);
		service.doSome();
	}
	@Ignore
	@Test
	public void someTest2() {
		//创建容器对象,BeanFactory调用getBean获取响应对象时,才创建对象
		BeanFactory ac=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
		SomeService service=ac.getBean("someServiceImpl", SomeService.class);
		service.doSome();
	}

当将断点设置在
SomeService service=ac.getBean(“staticSomeServiceImpl”, SomeService.class);时
在这里插入图片描述有输出
当将断点设置在
SomeService service=ac.getBean(“someServiceImpl”, SomeService.class);时
在这里插入图片描述无输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值