Bean实例化四种方式

在工程src目录下创建applicationContext.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 
        https://www.springframework.org/schema/beans/spring-beans.xsd">

<beans>

1.常用 bean
在src文件下创建Bean1.java文件
注意当前使用spring创建的对象默认是无参构造方法,如果当前类中带有参数可以创建一个无参构造方法

public class Bean1 {

	private String name;

	public Bean1(String name) {
		super();
		this.name = name;
	}

	public Bean1() {
		super();
		System.out.println("bean1 构造函数调用");
	}
	
	
	
}

在资源文件applicationContext.xml中配置bean

<!-- 1. 实例化bean -->
	<bean id="bean1" class="com.igeek.Bean1"></bean>

创建测试类 SpringTest.java测试

@Test
	public void test1()
	{
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		Bean1 bean1 = (Bean1) ac.getBean("bean1");
		System.out.println(bean1);
	}

2. 静态工厂创建bean
在src 目录下创建Bean2.java

public class Bean2 {
	
	
	
	
	public Bean2() {
		super();
		// TODO Auto-generated constructor stub
		System.out.println("Bean2 构造函数调用 ");
	}

	public static Bean2 getBean2()
	{
		return new Bean2();
	}
	

}

在配置文件applicationContext.xml中添加配置信息:

<!-- 2.静态工厂方式创建bean 用来自定义工厂,让Spring 工厂来调用自定义的工厂,
			可以将对象的创建权限交给我们的工厂 -->
	<bean id="bean2" class="com.igeek.Bean2" factory-method="getBean2"></bean>

在测试文件SpringTest.java 添加测试代码测试:

@Test
	public void test2()
	{
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		Bean1 bean2 = (Bean1) ac.getBean("bean2");
		System.out.println(bean2);
	}

3.工厂方法模式实例化bean
在src文件下创建Bean3.java,Bean3Factory.java

public class Bean3 {


	public Bean3() {
		super();
		// TODO Auto-generated constructor stub
		System.out.println("Bean3 创建构造方法!");
	}


	
}
public class Bean3Factory {

	
	
	public Bean3Factory() {
		super();
		// TODO Auto-generated constructor stub
		System.out.println("Bean3Factory 构造方法调用!");
	}

	public Bean3 getBean3()
	{
		System.out.println("factory bean3 方法调用!");
		return new Bean3();
	}
	
}

在配置文件applicationContexxt.xml配置:

<!-- 3.实例化工厂的方式实例化bean -->
	<bean id="bean3Factory" class="com.igeek.Bean3Factory"></bean>
	<!-- 引用bean对象 -->
	<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3" ></bean>

在测试文件SpringTest.java 测试代码

@Test
	public void test3()
	{
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		Bean3 bean3 = (Bean3) ac.getBean("bean3");
		System.out.println(bean3);
	}

4. FactoryBean接口实现
在src目录下创建Bean4.java,FactoryBean4.java

public class Bean4 {

}

public class FactoryBean4 implements FactoryBean<Bean4>{

	@Override
	public Bean4 getObject() throws Exception {
		// TODO Auto-generated method stub
		//可以写一些初始化数据
		return new Bean4();
	}

	/***
	 * 返回类型
	 */
	@Override 
	public Class<?> getObjectType() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean isSingleton() {
		// TODO Auto-generated method stub
		return false;
	}

}

在配置文件applicationContext.xml中添加配置信息:

<!-- 4.实现接口 FatoryBean(框架底层调用较常见)
		spring 在准备实例化bean的时候,new FactoryBean4 ,没有急着返回bean对象。
		会判断,类型对象是否实现了FactoryBean接口,如果实现了,就调用接口的getObject()方法
		得到Bean的实列,返回bean对象
	
		面试题:
		beanfactory 和factoryBean有何区别:
		beanfactory是找我们配置文件的底层接口
		factorybean作为bean的生成工具,它是用来获取bean的
	
	 -->
	<bean id="bean4" class="com.igeek.FactoryBean4"></bean>
	

在测试类SpringTest.java中添加类的测试:

@Test
	public void test4()
	{
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		Bean4 bean4 = (Bean4) ac.getBean("bean4");
		System.out.println(bean4);
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值