Bean获取Spring容器

一、目的
在某些特殊情况下,Bean需要实现某个功能,比如该bean需要输出国际化消息,或者该bean需要向Spring发布事件,但该功能必须借助于Spring容器才能实现,此时就必须让该Bean先获取Spring容器,然后借助于Spring容器来实现该功能。
为了让Bean获取它所在的Spring容器,可以让该Bean实现BeanFactoryAware接口。类似接口如:BeanNameAware,ResourceLoaderAware,ApplicationContextAware接口
二、示例

package com.home.bean;
import java.util.Locale;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class Persons implements ApplicationContextAware{
    //将BeanFactory容器以成员变量保存
    private ApplicationContext ctx;
    /*
     * Spring容器会检测容器中所有bean,如果发现某个bean实现了ApplicationContextAware接口,Spring容器
     * 会在创建该bean之后,自动调用该方法,调用该方法时,会将该容器本身作为参数传递给该方法
     */
    public void setApplicationContext(ApplicationContext ctx)
            throws BeansException {
        // TODO Auto-generated method stub
        this.ctx=ctx;
    }
    public void sayHello(String name){
        System.out.println(ctx.getMessage("hello", new String[]{name},Locale.getDefault()));
    }
}
配置文件如下:
 
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
       
       <property name="basenames">
            <list>
                <value>messagevalue>
            list>
             
       property>
    bean>
    <bean id="persons" class="com.home.bean.Persons">bean>
 国际化配置信息如下:
 hello=\u6B22\u8FCE\u4F60\uFF0C{0}
 now=\u73B0\u5728\u65F6\u95F4\u662F,{0}

 测试代码:
 package spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.home.bean.Persons;
/**
 *执行Persons对象的方法sayHello()方法时,该方法就自动具有了国际化的功能,
 *而这种国际化功能实际上是由spring容器提供的,
 *这就是让Bean获取他的容器的好处
 */
public class BeanGetApplication{
    public static void main(String[] args) throws Exception{
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
        Persons p=ctx.getBean("persons", Persons.class);
        p.sayHello("中文让");
    }
}

你可能感兴趣的:(Spring框架)