Spring的IOC/DI以及Bean实例化方式

(1)IOC快速入门:
Ioc它是什么,解决什么问题,它的原理是如何实现。
IOC(inversion of Controller) :控制反转。
在程序中所说的IOC其实简单说,就是原来由我们自己实例化的对象交给spring容器来实始化。这时对象的实始化的权利就会反转。ioc本质上就是通过xml配置文件+反射+factory来完成。在spring中提供一个BeanFactory工厂,我们使用的是他的一个子接口ApplicationContext。

(2)DI( 依赖注入) :在spring创建对象的过程中,对象所依赖的属性通过配置注入对象中。

Bean的三种实例化方式:

  • 无参构造方法
  • 静态工厂方法
  • 实例工厂方法

1.无参构造获取Bean

public class Bean1 {
	public Bean1() {
		System.out.println("Bean1无参构造");
	}
	
	public void show() {
		System.out.println("bean1 show...");
	}

}

//使用BeanFactory来获取Bean1
	@Test
	public void test1() {
		BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
		Bean1 bean1 = (Bean1) beanFactory.getBean("bean1");
		bean1.show();
	}
	
	//使用ClassPathXmlApplicationContext来获取Bean1
	@Test
	public void test2() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
		bean1.show();
	}
	
	//使用FileSystemXmlApplicationContext来获取Bean1(注意路径的书写,要加src)
	@Test
	public void test3() {
		ApplicationContext applicationContext = new FileSystemXmlApplicationContext("src/applicationContext.xml");
		Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
		bean1.show();
	}
<!-- 无参构造方式获取bean -->
	<bean name="bean1" class="bean.Bean1"></bean>

2.静态方法方式获取bean(工厂类Bean2Factory中有静态方法createBean2)

public class Bean2 {
	public void show() {
		System.out.println("bean2 show...");
	}

}
public class Bean2Factory {
	public static Bean2 createBean2() {
		return new Bean2();
	}

}
//使用静态方法获取Bean2
	@Test 
	public void test4() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		Bean2 bean2 = (Bean2) applicationContext.getBean("bean2");
		bean2.show();
	}
<!-- 静态方法方式获取bean(工厂类Bean2Factory中有静态方法createBean2) -->
	<bean name="bean2" class="bean.Bean2Factory" factory-method="createBean2"></bean>

3.实例方法获取bean(Bean3对应一个工厂类bean3Factory,里面有一个实例方法createBean3)

public class Bean3 {
	public void show() {
		System.out.println("bean3 show...");
	}

}

public class Bean3Factory {
	public Bean3 createBean3() {
		return new Bean3();
	}

}

//使用实例方法获取Bean3
	@Test
	public void test5() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		Bean3 bean3 = (Bean3) applicationContext.getBean("bean3");
		bean3.show();
	}
<!-- 实例方法获取bean -->
	<!-- 先配置一下Bean3的工厂类Bean3Factory -->
	<bean name="bean3Factory" class="bean.Bean3Factory"></bean>
	<!-- Bean3对应一个工厂类bean3Factory,里面有一个实例方法createBean3 -->
	<bean name="bean3" factory-bean="bean3Factory" factory-method="createBean3"></bean>

4.测试Bean的scope属性(singleton单例/prototype多例)

//测试Bean的scope属性(singleton单例/prototype多例)
	@Test
	public void test6() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
		Bean1 bean11 = (Bean1) applicationContext.getBean("bean1");
		System.out.println(bean1 == bean11);//单例模式下输出true(每个Bean中只有一个实例)
		System.out.println(bean1 == bean11);//多例模式下输出false(每个Bean中有多个实例)
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值