Spring(2)与接口配合使用和获取Bean容器的两种方式(BeanFactory 、ApplicationContext)

xiaoxiao2021-02-28  100

Spring开发提倡接口编程,配合IOC或者说DI,可以达到层间解耦的目的

1 与接口配合使用

// 接口 public interface ChangeLetter { public String change(); } // 实现类 public class UpperLetter implements ChangeLetter { private String str; // 小写转大写 public String change() { return str.toUpperCase(); } } public class LowerLetter implements ChangeLetter { private String str; // 大写转小写 public String change() { return str.toLowerCase(); } } //------ beans.xml <?xml version="1.0" encoding="utf-8"?> <beans> <bean id="changeLetter" class="com.test.service.imp.UpperLetter"> <property name="str" value="abcdef"></property> </bean> <!-- <bean id="changeLetter" class="com.test.service.imp.LowerLetter"> <property name="str" value="ABFHY"></property> </bean> --> </beans> // ------------ 使用 ---------- ApplicationContext ac = new ClassPathXmlApplicationContext("com/test/service/inter/beans.xml"); // 传统方式 UpperLetter uch = (UpperLetter) ac.getBean("changeLetter"); System.out.println(uch.change()); // 使用接口访问bean的方式 ChangeLetter changeLetter = (ChangeLetter) ac.getBean("changeLetter"); System.out.println(changeLetter.change());

2 获取Bean容器的两种方式

①Bean工厂

最简单的容器,提供了基础的依赖注入支持。创建各种类型的Bean.

// 从bean工厂取出bean对象:当实例化BeanFactory时,该容器内的bean不会被实例化,只有当使用getBean获取某个bean的时候,才会实时的创建该bean对象 BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml")); factory.getBean("iDCardService");

②应用上下文(ApplicationContext)

建立在Bean工厂基础之上,提供系统架构服务。 三种常用到的实现方式:

// ①-ClassPathXmlApplicationContext:从类路径中加载(桌面应用程序中常用) // -实例化applicationContext.xml对应的容器时,其中的bean就被创建了(该bean的scope是singleton) ApplicationContext acc = new ClassPathXmlApplicationContext("applicationContext.xml"); // ②-FileSystemXmlApplicationContext:从文件系统中加载(必须使用绝对路径) ApplicationContext acc = new FileSystemXmlApplicationContext("C:\\Users\\Jiaozl\\Desktop\\codes\\MyEclipseCodes\\MySpring\\src\\applicationContext.xml"); // ③-XmlWebApplicationContext:从web系统中加载(web应用中常用,当Tomcat启动的时候加载) acc.getBean("iDCardService");

③结论

如果使用ApplicationContext,则配置 的bean如果是singleton,不管用不用,都被实例化(好处是可以预先加载,缺点是耗内存);如果是BeanFactory ,则当实例化该bean对象容器的时候,配置的bean不会马上被实例化,只有使用的时候,才被实例化(好处是节约内存,缺点是速度变慢)。(一般没有特殊要求,应当使用ApplicationContext)

转载请注明原文地址: https://www.6miu.com/read-63395.html

最新回复(0)