控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。
简单来说,Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。
IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试,单元测试不再需要单例和JNDI查找机制。最小的代价和最小的侵入性使松散耦合得以实现。IOC容器支持加载服务时的饿汉式初始化和懒加载。
IOC 解决了类与类之间的依赖关系。程序员将控制类与类之间依赖的权利交给了IOC,IOC 的原理很简单,底层就是java的反射。利用set方法对实例的依赖进行注入。
xml方式注入bean
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="person" class="cn.qin.entity.Person"> <property name="name" value="qq"/> <property name="age" value="1"/> </bean> </beans>
获取bean
public static void main(String[] args) { ApplicationContext app =new ClassPathXmlApplicationContext("beans.xml"); Person person=(Person)app.getBean("person"); System.out.println(person); }
注解的方式注入bean ,创建一个配置类Config,给容器注册一个类 返回Person类型
@Configuration public class Config { @Bean("person1") //设置bean的id 不设置默认使用方法名 public Person person(){ return new Person("qlr",26); } }
获取bean
AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(Config.class);
Person person=(Person)app.getBean("person1");
打印 bean 的id
String[] names=app.getBeanDefinitionNames(); for (String name : names){ System.out.println(name); }