bean工厂和ApplicationContext

获取bean的两种方法

1. 从applicationcontext 应用上下文容器中获取

2. 从bean 工厂获取 bean 的区别

使用ApplicationContext 获取bean的例子

我们定义一个Student 类,然后让spring去调用它

Student.java

package com.getBean;

/**

* Created by admin on 2017/12/9.

*/

public class Student {

private String name;

private int age;

private int id;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

System.out.print(name);

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

}

// 把Student 类加入到spring配置文件,

<bean id="student" class="com.getBean.Student">

<property name="name">

<value>胖子哟</value>

</property>

<property name="age">

<value>1</value>

</property>

<property name="id">

<value>1</value>

</property>

</bean>

// 通过ApplicationContext 调用bean

package com.getBean;

import org.springframework.beans.factory.xml.XmlBeanFactory;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.springframework.beans.factory.BeanFactory;

import org.springframework.core.io.ClassPathResource;

/**

* Created by admin on 2017/12/9.

* 介绍两种获取bean的方式 与其他们的不同

* 1. 从ApplicationContext 容器上下文获取bean

* 2. 从BeanFactory 获取bean

*/

public class runGetBean {

public static void main(String[] args){

// 1、通过ApplicationContext获取bean

// 当我们调用 new ClassPathXmlApplicationContext 则spring配置文件中的bean 就会被实例化 该bean的scope 是singleton 单实例的

ApplicationContext app = new ClassPathXmlApplicationContext("com/getBean/beans.xml");

app.getBean("student");

}

}

这种方式获取bean 则在创建 ApplicationContext 实例时会自动实例化配置文件中的所有bean

2. 使用bean 工厂来获取bean

package com.getBean;

import org.springframework.beans.factory.xml.XmlBeanFactory;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.springframework.beans.factory.BeanFactory;

import org.springframework.core.io.ClassPathResource;

/**

* Created by admin on 2017/12/9.

* 介绍两种获取bean的方式 与其他们的不同

* 1. 从ApplicationContext 容器上下文获取bean

* 2. 从BeanFactory 获取bean

*/

public class runGetBean {

public static void main(String[] args){

// 1、通过ApplicationContext获取bean

// 当我们调用 new ClassPathXmlApplicationContext 则spring配置文件中的bean 就会被实例化 该bean的scope 是single 单实例的

// ApplicationContext app = new ClassPathXmlApplicationContext("com/getBean/beans.xml");

// app.getBean("student");

// 通过bean 工厂来获取bean

BeanFactory factory = new XmlBeanFactory(new ClassPathResource("com/getBean/beans.xml"));

factory.getBean("student");

}

}

使用bean工厂时则是只有你调用了getBean 方法时,bean实例才会被创建

在大部分的项目开发中都是使用ApplicationContext方式获取bean, 因为它可以提前加载,速度较快

而在移动设备中则多数使用bean工厂,因为其节约内存

总结: 如果使用ApplicationContext 则配置的bean 如果是singleton 不管你是否使用,都会被实例化,好处是可以预先加载,坏处是浪费内存

如果是使用BeanFactory 则配置的bean 不会被马上实例化,当你使用的时候才会被实例化,好处是节约内存

一般如果没有特殊要求,则应该使用ApplicationContext

原文地址:https://www.cnblogs.com/SunshineLittleCat/p/8280013.html

时间: 2024-11-09 20:15:23

bean工厂和ApplicationContext的相关文章

BeanFactory 和ApplicationContext(Bean工厂和应用上下文)

Bean工厂(BeanFactory接口),提供了基础的依赖注入支持. 应用上下文(ApplicationContext接口),建立在Bean工厂基础之上,提供了系统架构服务. ApplicationContext提供了更多功能: 1.提供了文本信息解析工具,包括对国际化(I18N)的支持. 2.提供了载入文件资源的通用方法,如载入图片. 3.可以向注册为监听器的Bean发送事件. ApplicationContext和BeanFacotry相比,提供了更多的扩展功能,但其主要区别在于后者是延迟

从基础知识到重写Spring的Bean工厂中学习java的工厂模式

1.静态工厂模式其他对象不能直接通过new得到某个类,而是通过调用getInstance()方法得到该类的对象这样,就可以控制类的产生过程.顺带提一下单例模式和多例模式:  单例模式是指控制其他对象获得该对象永远只有同一个对象  而多例模式则是根据需要从某个具体集合中获取所需的对象 1 import java.util.ArrayList; 2 import java.util.List; 3 4 5 public class Car implements Moveable{ 6 private

理解Spring的Bean工厂

一提到工厂,我们先来回忆前面学习过的工厂方法和抽象工厂模式: 工厂方法:针对产品维度,可以产生新的产品,也可以产生新的产品工厂,既可以扩展产品维度.但是如果我们想在普通工厂上生产产品系列,就会特别麻烦如果产生Apple你就得产生AppleFactory,如果产生Mushroom,就得产生MushroomFactory.这样就会照成工厂泛滥. 抽象工厂:针对产品系列,可以在谋一系列的产品上进行扩展.缺点是如果产生产品新种,改动就会很多. Spring工厂:可以在产品系列方面既能扩展,又能确定产品品

spring bean注册之bean工厂方式

一般我们在spring中注册一个bean,直接 <bean id="websocket" class="com.sdyy.common.spring.websocket.WebsocketEndPoint"/> 这样会用WebsocketEndPoint的构造方法(这种是无参),为我们创建一个对象bean. ----------------------------分界线-------------------------------------------

spring自定义bean工厂模式解耦

在resources下创建bean.properties accountService=cn.flypig666.service.impl.AccountServiceImpl accountDao=cn.flypig666.dao.impl.AccountDaoImpl 创建工厂:BeanFactory.java 创建单例对象效果更好 创建Map<String,Object>类型的容器beans 1 //定义一个Properties对象 2 private static Properties

bean的创建(五)第三部分 bean工厂方法参数的解析

准备好一系列参数之后,开始参数类型的转换,方法参数的对应. ConstructorResolver.createArgumentArray private ArgumentsHolder createArgumentArray( String beanName, RootBeanDefinition mbd, ConstructorArgumentValues resolvedValues, BeanWrapper bw, Class<?>[] paramTypes, String[] par

The spring, whose spring? my spring!

Spring在Java界也算是耳熟能详了.不久前,身为小菜的我,还在嫌弃他的繁琐,甚至认为他是多余的. "根本不知道要他干嘛,除了带给我们一堆配置文件." 可好像有人说过,存在即合理. 也是,他能这么流行,肯定是有他的原因的,何况他貌似还越来越火.(spring全家桶已经向我们袭来) Spring框架,其实说白了他就是一个工具,工具都是为人民服务的,那么他提供了哪些服务呢? Spring核心服务: 1,控制反转(invesion of control) 2,面向切面(Aspect Or

hsp Spring学习笔记

一.Spring是什么及快速入门案例 1.spring纵跨三层 spring纵跨web层.业务层.dao层,接管这三层,配置bean,维护bean关系 (1)Struts是web框架(jsp/action/actionform) (2)hibernate是orm框架,处于持久层 (3)spring是容器框架,用于配置bean,并维护bean之间关系的框架 Spring中的bean,Java中的任何对象 Ioc控制反转 DI 依赖注入 ?快速入门 开发一个spring项目 1. 引入spring的

Spring 中 ApplicationContext 和 BeanFactory 的区别,以及 Spring bean 作用域

//从ApplicationContext 中取 bean ApplicationContext ac = new ClassPathXmlApplicationContext ( "com/hsp/beans.xml" ) ; ac.getBean("beanId"); 当我们去实例化beans.xml,该文件中配置的 bean 就被实例化(不论你用还是不用,bean对象都在那),而且该对象是singleton单例的.(每个bean都有scope属性,可以人为的设