<Spring实战>2:装配Bean

1 声明Bean

1.1 创建 Spring 配置

  Spring 容器提供两种配置 Bean 的方式:xml 配置和基于注解配置。

  Spring 配置文件:

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

</beans>

  Spring 框架自带10个命名空间配置:

  • aop:为生命切面以及将@AspectJ注解的类代理为Spring切面提供了配置元素
  • beans:支持声明Bean和装配Bean,是Spring最核心也是最原始的命名空间
  • context:为配置Spring应用上下文提供了配置元素,包括自动检测和自动装配Bean、注入非Spring直接管理的对象
  • jee:提供了Java EE API的集成
  • jms:为声明消息驱动的POJO提供了配置元素
  • lang:支持配置由Groovy、JRuby或BeanShell等脚本实现的Bean
  • mvc:启用Spring MVC的能力,例如面向注解的控制器、视图控制器和拦截器
  • oxm:支持Spring的对象到XML映射配置
  • tx:提供声明式事物配置
  • util:提供各种各样的工具类元素,包括把集合配置为Bean、支持属性占位符元素

1.2 声明一个简单的 Bean

package com.hundsun.idol.impl;

import com.hundsun.idol.Performer;

// 一个杂技师
public class Juggler implements Performer {

    private int beanBags = 3;

    public Juggler() {}

    public Juggler(int beanBags) {
        this.beanBags = beanBags;
    }

    @Override
    public void perform() {
        System.out.println("Juggler " + beanBags + " BEANBAGS");
    }
}

在 Spring 配置文件中进行声明:

<bean id="duke" class="com.hundsun.idol.impl.Juggler"/>

通过 <bean> 元素将创建一个由 Spring 容器管理的名为 duke 的 Bean。加载 Spring 的上下文:

ApplicationContext context = new ClassPathXmlApplicationContext("com/hundsun/idol/idol.xml");
Performer duke = (Performer) context.getBean("duke");
duke.perform();

1.3 通过构造器

使用有参构造器声明 Bean:

<bean id="duke" class="com.hundsun.idol.impl.Juggler">
    <constructor-arg value="15"/>
</bean>

使用 <constructor-arg> 将调用 Juggler 的有参构造器。也可以配置通过构造器注入对象的引用:

package com.hundsun.idol.impl;

import com.hundsun.idol.Poem;

// 会朗诵的杂技师
public class PoeticJuggler extends Juggler {

    // 朗诵的诗歌
    private Poem poem;

    public PoeticJuggler(Poem poem) {
        super();
        this.poem = poem;
    }

    public PoeticJuggler(int beanBags, Poem poem) {
        super(beanBags);
        this.poem = poem;
    }

    @Override
    public void perform() {
        super.perform();
        System.out.println("while reciting...");
        poem.recite();
    }
}

先将一个 Poem 对象声明为 Bean:

<bean id="apoem" class="com.hundsun.idol.impl.APoem"/>

使用 <constructor-arg> 的 ref 属性将 id 为 apoem 的 Bean 引用传递给构造器:

<bean id="poeticDuke" class="com.hundsun.idol.impl.PoeticJuggler">
    <constructor-arg value="15"/>
    <constructor-arg ref="apoem"/>
</bean>

有时候静态工厂方法是实例化对象的唯一方法,Spring 支持通过 <bean> 元素的 factory-method 属性来装配工厂创建的 Bean。

package com.hundsun.idol.impl;

// Stage单例类
public class Stage {
    private Stage() {}

    private static class StageSingletonHolder {
        static Stage instance = new Stage();
    }

    public static Stage getInstance() {
        return StageSingletonHolder.instance;
    }
}

Stage 没有公开的构造方法,静态方法 getInstance() 每次被调用时都返回相同的实例。在配置文件中可以使用 factory-method 来进行配置:

<bean id="theStage" class="com.hundsun.idol.impl.Stage" factory-method="getInstance"/>

1.4 Bean 的作用域

  所有的 Spring Bean 默认都是单例,当容器分配一个 Bean 时,它总是返回 Bean 的同一个实例。scope 属性可以配置 Bean 的作用域:

  • singleton:在每一个 Spring 容器中,一个 Bean 定义只有一个对象实例(默认)
  • prototype:允许 Bean 的定义可以被实例化任意次(每次调用都创建一个实例)
  • request:在一次 HTTP 请求中,每个 Bean 定义对应一个实例(仅基于 Web 的 Spring 上下文)
  • session:在一个 HTTP Session 中,每个 Bean 定义对应一个实例(仅基于 Web 的 Spring 上下文)
  • global-session:在一个全局的 HTTP Session 中,每个 Bean 定义对应一个实例(仅在 Portlet 上下文中有效)

1.5 初始化和销毁 Bean

  <bean> 的 init-method 和 destroy-method 可以配置初始化时和容器移除对象之前要调用的方法。如果在上下文中定义的许多 Bean 都拥有相同名字的初始化方法和销毁方法,可以使用 <beans> 元素的 default-init-method 和 default-destroy-method 属性。

2 注入 Bean 属性

时间: 2024-08-06 05:10:32

<Spring实战>2:装配Bean的相关文章

spring实战之装配bean

内容参考自spring in action一书. 创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入的本质. 1. 创建spring配置 spring是一个基于容器的框架.如果没有配置spring,那么它就是一个空的容器,所以需要配置spring来告诉容器它需要加载哪些Bean和如何装配这些bean,这样才能确保它们能够彼此协作. 从spring3.0开始,spring容器提供了两种配置bean的方式.第一种是传统上的使用一个或多个XML文件作为配置文件.第二种提供了基于java注解的配

Spring之自动装配bean

Spring之自动装配bean 最近学习Spring框架,参考资料是Spring IN ACTION----第一张内容飘过去~~ 从第二章的自动装配bean开始,不过学习Spring核心最重要的还是ioc的注入模式吧! 书上是这么说的----(概念问题,哈哈),首先普及几个概念 --------------------------------------------------------------------------------------------------------------

Spring 之自动化装配 bean 尝试

[Spring之自动化装配bean尝试] 1.添加dependencies如下所示(不是每一个都用得到 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.9.RELEASE</version> </dependency

spring中自动装配bean

首先用@Component注解类: package soundsystem: import org.springframework.stereotype.Component; @Component public class TestBean{ …… } 开启组件扫描spring才能自动装配bean,创建一个@ComponentScan注解的类 package soundsystem: import org.springframework.context.annotation.componentS

Spring框架---IOC装配Bean

IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicationContext.xml配置文件: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans&

Spring系列之装配Bean

一.概述 容器是Spring框架的核心,Spring容器使用IOC管理所有组成应用系统的组件.Spring有两种不同的容器:BeanFactory提供最简单的容器,提供了最基础的依赖注入支持,ApplicationContext建立在BeanFactory的基础之上,提供了系统构架服务如从属性文件中读取文本信息,事件传递等. 在Spring容器中拼凑Bean叫做装配,装配Bean的时候,你是在告诉容器需要哪些Bean以及容器如何使用依赖注入将它们配合在一起. 二.装配Bean 2.1  使用XM

spring学习总结——装配Bean学习三(xml装配bean)

通过XML装配bean Spring现在有了强大的自动化配置和基于Java的配置,XML不应该再是你的第一选择了.不过,鉴于已经存在那么多基于XML的Spring配置,所以理解如何在Spring中使用XML还是很重要的.但是,我希望本节的内容只是用来帮助你维护已有的XML配置,在完成新的Spring工作时,希望你会使用自动化配置和JavaConfig. 一.创建XML配置规范 在使用XML为Spring装配bean之前,你需要创建一个新的配置规范.在使用JavaConfig的时候,这意味着要创建

3.spring:自动装配/Bean之间的关系/作用域/外部文件/spel/

1.自动装配/手动装配 xml配置文件里的bean自动装配 Spring IOC 容器里可以自动的装配Bean,需要做的仅仅是在<bean>的autowire属性里面指定自动装配模式 ->byType(根据类型自动进行装配):若IOC容器里需要有多个与目标Bean类型一样的Bean,在这种情况子下,Spring无法判定那个Bean合适,所以不能执行自动装配 ->byName(根据名称自动装配):必须将目标Bean的名称和属性名设置完全相同, ->constuuctor(通过是

Spring探究-----自动装配Bean详解

1.xml配置文件(了解) 1.1 byName 按名称自动装配(推荐,需要get和set方法) 根据类型进行自动装配. 但要求 IOC 容器中只有一个类型对应的 bean, 若有多个则无法完成自动装配 <bean id="student" class="com.spring.autowire.Student" autowire="byName"> <property name="stuName" value

Spring学习(二)--装配Bean

一.Spring装配机制 Spring提供了三种主要的装配机制: 1.在XML中进行显示配置 2.在Java中进行显示配置 3.隐式的bean发现机制和自动装配--自动化装配bean Spring可以通过注解来进行自动装配(无需再手动写配置文件),Spring从两个角度实现自动化装配: 1.组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean; 2.自动装配(autowiring):Spring自动满足bean之间的依赖;--以CD及CD播放器为示