spring的IOC
IOC(Inversion of Control)中文译为控制反转,又称为“依赖注入”(DI =Dependence Injection)
简单的来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系。他们的依赖关系只在使用的时候才建立。简单来说就是不需要NEW一个对象了。
Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。 不过AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便
IOC:
IOC就实现了只要修改配置文件applicationContext.xml,改下就可以注入,而不用修改class类。通过 .getBean() 函数就可以得到一个该teamDao类的对象(IOC),并且该对象已经根据配置文件中指定的属性值进行了初始化设置到teamService里面去(DI)。
1.IOC是什么?
IOC(Inversion of Control)控制反转,IoC是一种新的Java编程模式,目前很多轻量级容器都在广泛使用的模式。
2.IOC解决了什么问题?
在IOC出现以前,组件之间的协调关系是由程序内部代码来控制的,或者说,以前我们使用New关键字来实现两组间之间的依赖关系的。 这种方式就造成了组件之间的互相耦合。IoC(控制反转)就是来解决这个问题的,它将实现组件间的关系从程序内部提到外部容器来管理。也就是说,由容器在运行期将组件间的某种依赖关系动态的注入组件中。
IoC是Spring的核心,贯穿始终。对于Spring框架来说,就是由Spring来负责控制对象的生命周期和对象间的关系。
1.Tomcat启动的时候,自动加载applicationContext.xml文件,
<beanid="teamService"
class="com.chuanxi.training.service.impl.TeamServiceImpl">
<property name="teamDao" ref="teamDao"></property>
</bean>
<beanid="teamDao" class="com.chuanxi.training.dao.hibernate.TeamDaoHibernate">
</bean>
自动将teamDao对象注入到teamService里面,保存在服务器里面(即Context上下文,要得用的时候可以直接从context里面取teamSevice服务)
DI:
依赖注入(Dependency Injection):这就是DI,字面上理解,依赖注入就是将服务注入到使用它的地方。对象只提供普通的方法让容器去决定依赖关系, 容器全权负责组件的装配,它会把符合依赖关系的对象通过属性(JavaBean中的setter)或者是构造子传递给需要的对象。 相对于IoC而言,依赖注入(DI)更加准确地描述了IoC的设计理念。所谓依赖注入,即组件之间的依赖关系由容器在应用系统运行期来决定, 也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。
Spring中DI有两种实现方式---Setter方式(传值方式即teamService类里面有setTeamDao()方法,把控制反转new的对象teamdao设置到teamService里面去)和构造器方式(引用方式)。
1.applicationContext.xml配置文件里:
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
</bean>
2.在你要注入的类里面导包:
import javax.annotation.Resource;
3.在再注入的对象上一行写@Resource如下:
@Resource
private TeamService teamService ;
它会自动把前面IOC里面保存在服务器里面的teamService取出来,赋值给该对象,而不用在该类里面写setTeamService() 和 getTeamService()方法。
<!--EndFragment-->