单例模式&BeanFactory与 ApplicationContext之间的区别

BeanFactory博客书写 使用对象的时候创建,这是和ApplicationContext的区别

Resource resource=new ClassPathResource("applicationContext.xml");

BeanFactory ctx=new XmlBeanFactory(resource);

获取到上下文,并没有初始化bean,等待使用bean的时候才初始化

ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");

所有的bean已经初始化了

http://www.yesky.com/imagesnew/software/spring/beans.html

代码通过getBean()方法从容器获取指定的bean实例,容器首先会调用Bean类的无参构造器,创建实例对象

AOP概念:

AOP面向切面编程,横切关注点

2.AOP专业术语

切点:主业务类中能匹配到切点表达式的方法

切面:通知和切点的集合  交叉业务类称为切面

连接点:主业务类中的方法

通知:增强类中的方法

织入:动态的过程,将通知和切点绑定的过程称为织入

基于xml的DI(Dependency Injection)

注入类型:

1.1设值注入(set方法注入):本质上是调用了Bean的setXXX()进行值的注入

普通属性

<property name="name" value="微冷的雨"></property>

<property name="age" value="18"></property>

域属性(JavaBean属性)

<property name="myCar" ref="mmCar"></property>

接下来到我们昨天学的了

构造注入,开始以为很难,其实也不过如此

12.  *构造注入:

<bean id="stu2" class="cn.happy.day01.entity.Student">

<constructorb-arg> 是构造标签

<constructor-arg index="0" value="微冷的雨"></constructor-arg>

<constructor-arg index="1" value="18"></constructor-arg>

<constructor-arg index="2"  ref="mmCar"></constructor-arg>

</bean>

13.命名空间p注入 (2个步骤)

13.命名空间p注入 (2个步骤)

*********************************************************

1.1 使用前要先要在Spring配置文件中引入p命名空间

xmlns:p="http://www.springframework.org/schema/p"

1.2.本质上还是set方法注入

<!--02.p命名空间注入 -->

<bean id="stu3" class="cn.happy.day01.entity.Student"

p:name="国庆放假买手机" p:age="18" p:myCar-ref="mmCar">

集合属性注入

<bean id="array" class="cn.happy.spring04collection.MyCollection">

<property name="array">

<array>

<value>zly</value>

<value>lxl</value>

</array>

</property>

</bean>

List

配置文件

<bean id="listCollection" class="cn.day00di_xml.BeanCollection">

<property name="list">

<list>

<ref bean="car"></ref>

<ref bean="car2"></ref>

</list>

</property>

</bean>

Map

<!--集合属性注入之           Map-->

<bean id="mapCollection" class="cn.day00di_xml.BeanCollection">

<property name="map">

<map>

<entry key="Green">

<ref bean="car2"></ref>

</entry>

<entry key="Pink">

<!-- properties -->

<bean id="properties" class="cn.happy.spring04collection.MyCollection">

<property name="properties">

和Map集合属性打出来的效果是一样的

<props>

<prop key="001">001</prop>

<prop key="002">002</prop>

</props>

</property>

</bean>

1.1引入

spring-aop-4.2.0.RELEASE.jar

引入aopjar包是因为注解用到了aop的内容

相同点:

    两者都是通过xml配置文件加载bean,ApplicationContext和BeanFacotry相比,提供了更多的扩展功能。

   不同点:

    BeanFactory是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常;而ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext

component:组件

一个bean,就是一个组件

scan:浏览

开启包扫描器

cn.happy.entity

<context:component-scan base-package="路径名"></context:component-scan>

作业:

3.BeanFactory 和ApplicationContext区别

3.一个简单的例子来证明BeanFactory和ApplicationContext主要区别

搭建工程的环境就不说了,直接上代码。

1.首先创建一个实体类:User

public class User {

     public User(){

      System.out.println("实例化User");

     }

}

2.在创建一个ApplicationContext.xml文件

<?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">

    <bean id="user" class="cn.test.User"></bean>

</beans>

3.创建测试类

public class TestHappy {

/**

 * BeanFactory的测试

 */

@Test

public void beanFactoryTest(){

BeanFactory beanFactory=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));

}

/**

 * ApplicationContext的测试

 */

@Test

public void applicationContextTest(){

ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

}

}

BeanFactory测试结果:

ApplicationContext测试结果:

总结:

BeanFactory当需要调用时读取配置信息,生成某个类的实例。如果读入的Bean配置正确,则其他的配置中有错误也不会影响程序的运行。而ApplicationContext 在初始化时就把 xml 的配置信息读入内存,对 XML 文件进行检验,如果配置文件没有错误,就创建所有的Bean ,直接为应用程序服务。相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。

时间: 2024-10-10 08:45:57

单例模式&BeanFactory与 ApplicationContext之间的区别的相关文章

BeanFactory和ApplicationContext有什么区别?

BeanFactory 可以理解为含有bean集合的工厂类.BeanFactory 包含了种bean的定义,以便在接收到客户端请求时将对应的bean实例化.BeanFactory还能在实例化对象的时生成协作类之间的关系.此举将bean自身与bean客户端的配置中解放出来.BeanFactory还包含了bean生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods).从表面上看,application context

BeanFactory和ApplicationContext的作用和区别

BeanFactory和ApplicationContext的作用和区别 作用: 1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期. 2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能: a. 国际化支持b. 资源访问:Resource rs = ctx. getResource(”classpath:config.properties”), 

Spring之BeanFactory与ApplicationConText区别

使用BeanFactory从xml配置文件加载bean: import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; public class XmlConfigWithBeanFactory {     public static void main(String[] args) { XmlBeanFactory facto

Spring中BeanFactory和ApplicationContext的区别

我用一个例子去测试BeanFactory和ApplicationContext的区别 首先建立一个bean public class User {//声明无参构造,打印一句话,监测对象创建时机 public User(){ System.out.println("User对象初始化"); } } 然后再建立测试类 public class UserTest { @Test public void ApplicationContexttest(){ ApplicationContext

Spring的beanFactory与ApplicationContext区别

BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring的许多插件,如AOP功能.Web应用等.   ApplicationContext接口,它由BeanFactory接口派生而来,因而提供BeanFactory所有的功能.ApplicationContext以一种更向面向框架的方式工作以及对上下文进行分层和实现继承,ApplicationContext包还提供了以下的功

BeanFactory和ApplicationContext的介绍

------------------siwuxie095 Spring 通过一个配置文件描述 Bean 和 Bean 之间的依赖关系, 利用 Java 语言的反射功能实例化 Bean,并建立 Bean 之间的 依赖关系 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供了 Bean 实例缓存.生命周期管理.Bean 实例代理.事件发布 和 资源装载 等高级服务 BeanFactory 是 Spring 框架最核心的接口,它提供了高级 IoC 的 配置机制,BeanFactory 使

Spring系列之beanFactory与ApplicationContext

一.BeanFactoryBeanFactory 是 Spring 的“心脏”.它就是 Spring IoC 容器的真面目.Spring 使用 BeanFactory 来实例化.配置和管理 Bean. BeanFactory:是IOC容器的核心接口, 它定义了IOC的基本功能,我们看到它主要定义了getBean方法.getBean方法是IOC容器获取bean对象和引发依赖注入的起点.方法的功能是返回特定的名称的Bean. BeanFactory 是初始化 Bean 和调用它们生命周期方法的“吃苦

转:Spring系列之beanFactory与ApplicationContext

原文地址:Spring系列之beanFactory与ApplicationContext 一.BeanFactoryBeanFactory 是 Spring 的"心脏".它就是 Spring IoC 容器的真面目.Spring 使用 BeanFactory 来实例化.配置和管理 Bean. BeanFactory:是IOC容器的核心接口, 它定义了IOC的基本功能,我们看到它主要定义了getBean方法.getBean方法是IOC容器获取bean对象和引发依赖注入的起点.方法的功能是返

BeanFactory 和ApplicationContext

BeanFactory和ApplicationContext对待bean后置处理器稍有不同.ApplicationContext会自动检测在配置文件中实现了BeanPostProcessor接口的所有bean,并把它们注册为后置处理器,然后在容器创建bean的适当时候调用它.部署一个后置处理器同部署其他的bean并没有什么区别.而使用BeanFactory实现的时候,bean后置处理器必须通过下面类似的代码显式地去注册. 参考资料:http://blog.csdn.net/chensugang/