您的位置:首页 > 移动开发

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

2017-05-06 22:29 666 查看
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐