码迷,mamicode.com
首页 > 编程语言 > 详细

<Spring实战>2:装配Bean

时间:2016-04-06 23:30:56      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:

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 属性

 

<Spring实战>2:装配Bean

标签:

原文地址:http://www.cnblogs.com/geb515/p/5361544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!