Spring(4) Bean获取Spring容器

  1. 当一个bean需要获取它所在spring容器的时候,实际上这种情况是很常见的,例如要输出国际化信息,发布事件等。
  2. bean可以通过实现BeanFactoryAware接口实现获取它所在的spring容器,BeanFactoryAware只有一个setBeanFactory方法,spring容器会检测容器所有的bean,如果发现有bean实现了BeanFactoryAware(当然这个类已经实现了setBeanFactory方法),它会把它所在的容器当作参数传给它。
  3. 下面是一个例子,具体讲解穿插在代码里边。
  4. 程序结构
  5. package service;
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    
    import java.util.Locale;
    
    /**
     * Person类实现了ApplicationContextAware接口,spring会把它所在的容器当作参数给他的setApplicationContext
     * 方法
     */
    public class Person implements ApplicationContextAware {
        private ApplicationContext applicationContext;
    //  这个变量用来保存它所在的spring容器
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.applicationContext = applicationContext;
        }
        public void sayHi(String name){
            System.out.println(applicationContext.
                    getMessage("hello", new String[]{name}, Locale.getDefault(Locale.Category.FORMAT)));
    //        在获取了spring容器之后,这个bean就可以使用已经保存有它所在的spring容器来获取国际化资源文件
        }
    }
    
    package test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import service.Person;
    
    /**
     * 逻辑是这样的,程序会先把spring容器给Person类,然后在这里使用的时候,Person类已经有了
     * sprig容器了,其他的就输出输出,没有什么了
     */
    public class SpringTest {
        public static void main(String []args){
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
            Person person = applicationContext.getBean("person", Person.class);
            person.sayHi("java");
        }
    }
    

    两个配置文件和前面的一样,就不多说了

    <?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">
        <!--这里是使用国际化资源文件,和前面例子的操作是一样的-->
        <bean id="messageSource"
              class="org.springframework.context.support.ResourceBundleMessageSource">
            <property name="basenames">
                <list>
                    <value>message</value>
                </list>
            </property>
        </bean>
        <!--获取spring容器的bean在配置上和普通的bean是一样的-->
        <bean id="person" class="service.Person"/>
    </beans>

    这是我看李刚编著的《轻量级javaEE企业应用实战(第五版)-Struts2+Spring5+Hibernate5/JAP2》后总结出来的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值