spring入门笔记(二)IOC和DI
程序员文章站
2022-06-22 16:06:10
...
IOC和DI
- IOC(控制反转):其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式
简单说对象与对象之间的依赖关系不是由一方来控制,而是由第三方来控制。
比如在servlet中创建service,由servlet来控制,缺点是service变化,servlet中也应跟着变化。
- DI(依赖注入):IOC 的另一种表述方式,即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入. 相对于 IOC 而言,这种表述更直接。
IOC容器
spring为我们提供了两种类型的容器
BeanFactory是spring框架基础设施,面向spring本身;
ApplicationContext面向spring的使用者
无论用哪个,配置文件是相同的。
常用的ApplicationContext有CLassPathXmlApplicationContext从类路径中加载,FileSystemXmlApplicationContext从文件系统中加载,
一些方法的使用
spring给我们提供了很多方法
下面是一些使用案例
import org.junit.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Arrays;
public class SpringTest {
@Test
public void test(){
//1.创建spring工厂
ApplicationContext factory = new ClassPathXmlApplicationContext("applicationcontext.xml");
//通过id获取bean对象
Person p1 = (Person) factory.getBean("p1");
// Person p1 = factory.getBean(Person.class); //唯一实例才可以,否则报错
Person p2 = (Person) factory.getBean("p2");
System.out.println(p1);
System.out.println(p2);
//通过别名获取bean对象
System.out.println(factory.getBean("zhang"));
System.out.println(factory.getBean("li"));
//通过id获取别名
String[] names=factory.getAliases("p1");
System.out.println(Arrays.toString(names));
//通过别名获取id和其他别名
System.out.println(Arrays.toString(factory.getAliases("zhang")));
//根据id获取类型
System.out.println(factory.getType("p1").getName());
//判断包含
System.out.println(factory.containsBean("p1"));
System.out.println(factory.containsBean("p3"));
//判断是否为单例
System.out.println(factory.isSingleton("p1"));
//检验单例
p1.setAge(81);
Person p3 = (Person)factory.getBean("p1");
System.out.println(p3);
}
}
其中相应的xml配置如下
<bean id="p1" name="zhang,san" class="Person">
<property name="age" value="18"/>
<property name="name" value="张三"></property>
</bean>
<bean id="p2" name="li" class="Person" scope="prototype">
<property name="age" value="18"/>
<property name="name" value="李四"></property>
</bean>
上一篇: Spring学习——IOC&DI学习笔记
下一篇: Spring学习笔记2——什么是IOC