spring的核心工作:1.创建对象 2.维护对象之间的依赖关系
举例:创建一个电脑E470对象,这个对象依赖两个类,显示器和CPU
创建接口:
package com.zs.entity; /** * 创建Cpu接口 */ public interface Cpu { /** * cpu有运算的方法 */ void calc(); }
package com.zs.entity; /** * 创建显示器接口 */ public interface Display { /** * 显示器有显示的方法 */ void show(); }
实现接口方法,显示器有两个实现类,一个lg显示器,一个三星显示器,Cpu有一个实现类,英特尔CPU。
package com.zs.entity.impl; import com.zs.entity.Display; /** * lg显示器实现显示器接口 */ public class LgDisplay implements Display { @Override public void show() { System.out.println("lg显示器正在显示画面"); } }
package com.zs.entity.impl; import com.zs.entity.Display; /** * 创建三星显示器类实现显示器接口 */ public class SumDisplay implements Display { @Override public void show() { System.out.println("三星显示器正在显示画面"); } }
package com.zs.entity.impl; import com.zs.entity.Cpu; public class InterCpu implements Cpu { @Override public void calc() { System.out.println("英特尔显示器正在运算"); } }
然后创建电脑E470对象:
package com.zs.entity.impl; import com.zs.entity.Cpu; import com.zs.entity.Display; /** * 创建e470电脑,电脑有显示器和Cpu */ public class E470 { private Display display; private Cpu cpu; /*电脑有自己的工作的方法*/ public void work(){ display.show(); cpu.calc(); } /*生成get和set方法*/ public Display getDisplay() { return display; } public void setDisplay(Display display) { this.display = display; } public Cpu getCpu() { return cpu; } public void setCpu(Cpu cpu) { this.cpu = cpu; } }
在spring工厂中添加对象:
<?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"> <!--将对象交给spring管理--> <!--bean标签,使用该元素描述需要spring容器管理的对象 id:配置类的唯一标识,id不可重复,获得对象时,根据id获得对象,不能使用特殊字符 name:给被管理的对象起名字,可以重复,可以使用特殊字符 class:被管理的对象的完整类名--> <bean id="lgDisplay" class="com.zs.entity.impl.LgDisplay"/> <bean id="interCpu" class="com.zs.entity.impl.InterCpu"/> <bean id="sumDisplay" class="com.zs.entity.impl.SumDisplay"/> <bean id="e470" class="com.zs.entity.impl.E470"> <!--property:类的属性 ref:是引用哪儿个对象,这里要写对象的id--> <property name="display" ref="lgDisplay"/> <property name="cpu" ref="interCpu"/> </bean> </beans>
BeanFactory是ApplicationContext的父接口,BeanFactory接口定义了一些spring工厂最底层的使用的方法,一
般在spring的源码中我们使用BeanFactory,但是该类不建议程序员直接使用,建议程序员使用
ApplicationContext接口,该接口对BeanFactory功能进行了一些扩展:
1,提供spring的国际化支持
2,提供了事物的处理方式
3,可以加载多个主配置文件
以后一般开发中使用ApplicationContext接口,但是接口不能直接使用,我们可以同
ClassPathXmlApplicationContext类来实例化这个接口。我们也可以使用FileSystemXmlApplicationContext来实
例化该接口。
测试从spring工厂中获取对象:
import com.zs.entity.impl.E470; import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringTest { @Test public void test1() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); E470 e470 = (E470) context.getBean("e470"); e470.work(); } }
结果如下: