1.DI和IOC 面试常问的两个东西的区别
IOC:控制反转,将对象创建权反转给了Spring
DI:依赖注入,前提必须要有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。
面向对象的时候
依赖
class A{
}
class B{
public void xxx(A a){
}
}
/**
*B类的某个方法中需要用到A类,就可以说B类依赖了A类
*/
继承
Class A{
}
class B extend A{
}
聚合:具有松散性
2.举个栗子
UserServiceImpl.java
/**
* 用户管理业务层接口实现类
* */
public class UserServiceImpl implements UserService{
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public void Save() {
System.out.println("执行了。。。"+name);
}
Springdemo1.java
@Test
/**
* Spring方式调用
* */
public void demo2() {
//创建Spring的工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService=(UserService) applicationContext.getBean("UserService");
userService.Save();
}
applicationContext.xml
<!-- Spring入门的配置 -->
<bean id="UserService" class="com.ittp.spring.demo1.UserServiceImpl">
<!--
在给Spring配置的xml环境下(这个环境是IOC环境)
设置了一个property,这个property让属性可以被依赖注入,
之后
name获取了class="com.ittp.spring.demo1.UserServiceImpl"下UserServiceImpl类中的name属性,
并通过value设置获取到的属性的值为“关羽”
再之后在测试类中使用Spring调用方式,
这个在IOC环境下的property就会被依赖,而它所包含的值就会被调用,注入到调用这个值的类中
-->
<property name="name" value="关羽"></property>
</bean>
在给Spring配置的xml环境下(这个环境是IOC环境)
设置了一个property,这个property让属性可以被依赖注入,
之后
name获取了class="com.ittp.spring.demo1.UserServiceImpl"下UserServiceImpl类中的name属性,
并通过value设置获取到的属性的值为“关羽”
再之后在测试类中使用Spring调用方式,
这个在IOC环境下的property就会被依赖,而它所包含的值就会被调用,注入到调用这个值的类中
这个过程被叫做DI(依赖注入)。