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)相关文章推荐
- spring接口 BeanFactoryAware,动态获取IOC容器里面的对象(多例)
- Spring中使用两种Aware接口自定义获取bean
- spring bean 不使用注入的方式获取的两种方式
- Spring中使用两种Aware接口自定义获取bean
- Spring实现Aware接口自定义获取bean的两种方式
- Spring中使用两种Aware接口自定义获取bean
- 7 -- Spring的基本用法 -- 4... 使用 Spring 容器:Spring 容器BeanFactory、ApplicationContext;ApplicationContext 的国际化支持;ApplicationContext 的事件机制;让Bean获取Spring容器;Spring容器中的Bean
- spring 容器后处理器 BeanFactoryPostProcessor 使用需要注意的一个问题
- spring不通过注入的方式获取对象(BeanFactoryAware \ApplicationContextAware )
- 使用web.xml方式加载Spring时,获取Spring context的两种方式
- servlet调用spring容器中的bean,的两种方式一种注解一种xml配置
- 获取Spring IOC容器代理的Bean实例的几种方式
- 如何手动获取Spring容器中的bean(ApplicationContextAware 接口)
- servlet调用spring容器中的bean,的两种方式一种注解一种xml配置
- Spring学习--实现 FactoryBean 接口在 Spring IOC 容器中配置 Bean
- [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间
- 从Spring容器中获取bean的几种方式
- Spring-实现FactoryBean接口的方式配置Bean
- 7.4.5: 使用Spring容器---让Bean获取Spring容器
- Spring 整合Quartz两种方式比较(JobDetailBean和MethodInvokingJobDetailFactoryBean方式)