Spring笔记——3.容器中的Bean

开发者在Spring框架下只需要做两件事:开发bean,配置bean。所以我们要做到:眼中看的是xml,戏中想的是java类代码,因为Srping本质就是通过xml来驱动java代码,每段xml都对应一段java代码。

bean的作用域

通过scope属性可以为bean设置如下作用域。

singleton:永远都只有一个实例。默认的是单例。创建后架构会持续跟踪维护。

prototype:每次get都是一个新的实例。new后就不管了。

request:同一个request中得到的总是同一个,请求结束,实例才消失。需要在web.xml中增加代码使之生效。

<listener>
    <listener-class>
    org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

session:对话中总是同一个。

global session:每个全局HTTP Session中对应同一个实例。

在web中如果使用JavaScript脚本获得容器,应该这样写:

WebApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(application);
Person p=(Person)ctx.getBean("person");

配置依赖

依赖要么是个确定的值,要么是另一个bean的引用。BeanFactory是在创建完容器后,需要bean才创建bean。ApplicationContext是一开始就创建所偶单例bean。记得之前我们使用ref来指定一个已经在容器中的bean的引用。如果我们给beans设置default-autowire属性,则架构可以自动的按照bean的需要加载它所依赖的对象。属性值有no、byName、byType。byType中如果正好有一个bean的类型符合set方法需要的类型,那就是它了!如果多于一个符合条件的bean,异常!byName中,如果set方法的名字与某个bean的名字一样,那就是他了!如果没找到,什么也不注入。还有constructor与autodetect决策。

注入嵌套bean

嵌套bean是指在property或者constructor-args下再来一个bean元素,该bean仅仅作为set或者构造方法的参数,它不能被容器获取。

只有当我们确定我们肯定没有机会去访问这个bean,才可以把它设置为嵌入bean。

注入集合值

注入集合与普通类型没什么区别,只是说property里面不再用value属性了,取而代之的是各种子元素注入list(list跟数组都用这个)、map、props、set。list下面的子元素是value。map下面有entry子元素,设置key与value(或者是value-ref,用于元素是对象的map)。set里面什么都可以放,value指定基本类型,ref指定其他容器中实例,bean制定一个嵌套bean,list,set,map,props可以再嵌套其他集合。props就是property的意思,里面用<prop key="length">18</prop>的形式指定。集合中的元素类型可以通过泛型确定。

组合属性

所谓组合属性,就是可以在当前bean中给bean的属性的属性赋值,使用类似OGNL表达式的形式。比如在example这个bean中给person属性的name赋值,直接如下:

<bean id="example" class="com.cm.example">
    <property name="person.name" value="Alvin"/>
</bean>

既然这样写,那么person就肯定不能为空,否则去哪找那个name呢?这个配置相当于在example类中如下写:

example.getPerson.setName("Alvin");
时间: 2024-10-24 05:25:53

Spring笔记——3.容器中的Bean的相关文章

spring在IoC容器中装配Bean详解

1.Spring配置概述 1.1.概述 Spring容器从xml配置.java注解.spring注解中读取bean配置信息,形成bean定义注册表: 根据bean定义注册表实例化bean: 将bean实例放入bean缓存池: 应用程序使用bean. 1.2.基于xml的配置 (1)xml文件概述 xmlns------默认命名空间 xmlns:xsi-------标准命名空间,用于指定自定义命名空间的schema文件 xmlns:xxx="aaaaa"-------自定义命名空间,xx

Spring笔记——6.容器中bean的生命周期

spring可以管理单例bean的生命周期,知道何时被创建,核实初始化,何时销毁,也可以进行某些通用资源申请,销毁前资源回收.对于prototype,容器只负责创建,之后就撒手不管自生自灭.容器不知道一共创建了多少prototype,也不知道他们什么时候会被销毁,所以容器没法管理prototype. 管理bean的生命周期有如下两个时机: 注入依赖关系后 即将销毁bean前 依赖关系注入后的行为 通过设定init-method属性指定某个方法或者实现InitializingBean接口指定需要实

Spring:获取容器中的Bean

某些情况下我们要获取 IOC 容器中指定注解.类型.名字的 Bean 要获取 IOC 容器中指定条件的 Bean 可以通过 ApplicationContext 相应的方法 @Autowired private ApplicationContext applicationContext; 获取指定注解所有的 Bean Map<String,Object> objectMap = applicationContext.getBeansWithAnnotation(Service.class);

String框架搭建的基本步骤,及从IOC容器中获取Bean

Spring框架的插件springsource-tool-suite-3.4.0.RELEASE-e4.3.1-updatesite(是一个压缩包)导入步骤: eclipse->help->Instal New Software->点击add,找到该压缩包->选择 Name下面选择带有 /Spring IDC 的多选框->取消最下边的选框  contact all...->next...->finish: 建立一个java project,在工程目录下(day-1

(spring-第2回)Spring的Schema,基于XML的配置(在IoC容器中装配Bean的前奏片)

要深入了解Spring机制,首先需要知道Spring是怎样在IoC容器中装配Bean的.而了解这一点的前提是,要搞清楚Spring基于Schema的Xml配置方案. 在深入了解之前,必须要先明白几个标签的意思(我会逐步引导读者理解,刚开始的懵懂无所谓,读者自会渐入佳境.初极狭,才通人.复行数十步,豁然开朗.). 什么是XML Schema? 用来描述 XML文档的结构,也被简称为XSD(XML Schema Definition),是一些规则的集合.(方式:通过定义schema文件 如 spri

在listener或者工具中使用spring容器中的bean实例

在项目中经常遇见需要在Listener中或者工具中使用Spring容器中的bean实例,由于bean不能在stataic的类中使用. 介绍一种方式: public class SpringTool { public static Object getObjectFromApplication(HttpSession session,String beanName){ ServletContext servletContext= session.getServletContext(); //通过W

spring在xml文件中配置bean的三种方法

一.最常见,也是缺省,是调用spring的缺省工厂类 spring缺省工厂类:org.springframework.beans.factory.support.DefaultListableBeanFactory使用其静态方法preInstantiateSingletons() 配置文件中最普通最基本的定义一个普通bean<bean id="DvdTypeDAOBean" class="com.machome.dvd.impl.DvdTypeDAO" >

Spring笔记——5.深入理解容器中的Bean

Spring框架的绝大部分工作是对bean的管理,包括管理bean的生命周期.使用bean继承功能. 抽象bean与子bean 为了防止太多十分类似的bean出现在xml中,我们使用抽象bean把共同的信息提取出来,使用abstract属性标记为true.它不能被实例化,意义只是被继承,是个模板.子bean可以继承抽象bean的实现类,构造器参数,属性配置信息.子bean可增加新的信息也可覆盖父bean.子bean通过parent属性指定父bean的名字.与java继承相比,bean继承的bea

Spring容器中获取bean实例的方法

// 得到上下文环境 WebApplicationContext webContext = ContextLoader .getCurrentWebApplicationContext(); // 使用上下文环境中的getBean方法得到bean实例 InhospDoctorStationController controller = (InhospDoctorStationController) webContext.getBean("inhospDoctorStationController