标签:
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个命名空间配置:
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 的作用域:
1.5 初始化和销毁 Bean
<bean> 的 init-method 和 destroy-method 可以配置初始化时和容器移除对象之前要调用的方法。如果在上下文中定义的许多 Bean 都拥有相同名字的初始化方法和销毁方法,可以使用 <beans> 元素的 default-init-method 和 default-destroy-method 属性。
2 注入 Bean 属性
标签:
原文地址:http://www.cnblogs.com/geb515/p/5361544.html