IOC:(Inversion(反转)of Control) :控制反转 控制:资源的获取方式,主动式(要什么资源都自己创建,但是复杂对象的创建是比较庞大的工程)和被动式(资源的获取不是程序员自己创建,而是交给容器来创建和设置) 容器:管理所有的组件(有功能的类) 主动的new资源变为被动的接受资源。 DI:(Dependency Injection)依赖注入 容器能知道哪个组件运行的时候,需要另一个组件(类);容器通过反射的形式,将容器中准备好的对象注入(利用反射给属性赋值)到本类。 只要是容器管理的组件,都能使用容器提供的强大功能;
以前是自己new对象,现在所有的对象交给容器创建,给容器中注册组件 框架编写流程: 1)导包 2)写配置 spring的配置文件中,集合了spring的ioc容器管理的所有组件 3)测试 先调高环境的版本 1)先写好一个person并设定好属性 2)再创建一个Spring Bean Configuration 3)在其中写:
<?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"> <!-- 注册一个person对象,spring会自动创建这个person对象 --> <!-- 一个bean标签可以注册一个组件 class:写要注册的组件的全类名 id:这个对象的唯一标识 --> <bean id="person01" class="com.yj.bean.person"> <!-- 使用property为person对象的属性赋值 name="lastName" 指定属性名 value="张三" 属性值 --> <property name="lastName" value="张三"></property> <property name="age" value="20"></property> <property name="email" value="qq.com"></property> <property name="gender" value="f"></property> </bean> </beans>4)最后从容器中拿出组件
@Test public void test() { //ApplicationContext代表ioc容器 //当前应用的xml配置文件在ClassPath下 //根据spring的配置文件得到ioc容器对象 ApplicationContext ioc = new ClassPathXmlApplicationContext("ioc.xml"); //容器帮我吗创建好了对象 person bean = (person) ioc.getBean("person01"); System.out.println(bean); }