(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中有多个实例)
}