Aware相关的接口

来源:互联网 发布:阿里云服务器 ftp 编辑:程序博客网 时间:2024/05/16 05:55

Aware相关的接口:必是在Spring实例化Bean之前进行相关的调用。

BeanNameAware:表示在Spring实例化Bean之前进行调用就是刚刚创建ApplicationContext实例的时候调用的方法:具体的使用方法是:

    public class HelloBean implements BeanNameAware {

    private String name;

    //setBeanName是在创建ApplicationContext的时候调用的方法

    public void setBeanName(String arg0) {

       System.out.println(arg0);

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

}

ApplicationContext.xml中的配置是:(直接编写一个Bean就可以了)

   <bean id="hello" class="org.sqs.Sprng.demo08.HelloBean">

        <property name="name">

            <value>小宋</value>

        </property>

    </bean>

编写的测试类是:

public class TestDemo08 {

    public static void main(String args[])

    {

    ApplicationContext context = context = new ClassPathXmlApplicationContext("applicationContext.xml");

//       HelloBean hb = (HelloBean)context.getBean("hello");

    }

}

结果很明显就只是打印出了一个“hello!而不是打印“小宋”!!

ApplicationContextAware接口:是在Bean初始化之后,ApplicationContext.xml实例被注入将被调用setApplicationContext(ApplicationContext arg0) 方法!!

具体的代码是:

首先是Bean类:

package org.sqs.Sprng.demo09;

import org.springframework.beans.BeansException;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;

public class HelloBean implements ApplicationContextAware {

    private String name;

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    //是在Bean生成之后,在ApplicationContext实例注入时执行的方法

    public void setApplicationContext(ApplicationContext arg0)

           throws BeansException {

       HelloBean hb = (HelloBean) arg0.getBean("hello");

        System.out.println("内部打印-->"+hb.getName());

    }

}

配置文件是:

   <bean id="hello" class="org.sqs.Sprng.demo09.HelloBean">

        <property name="name">

            <value>小宋</value>

        </property>

    </bean>
测试类是:
package org.sqs.Sprng.demo09;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDemo09 {
    public static void main(String args[])
    {
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}
程序最后的打印结果是:内部打印-->小宋
则说明了实现ApplicationContextAware接口之后,其中的方法是在ApplicationContext实例注入时候执行的方法!

     在Spring中也提供了一系列的消息的支持:
ApplicationContext类继承了MessageSource类:
首先先要在配置文件中写入一个bean节点:
    <bean id="messages" color="#0000ff">org.springframework.context.support.ResourceBundleMessageSource
">
        <property name="basenames">
              <value>messages</value>
        </property>
</bean>

写一个资源文件名称为messages_en_US.properties 一定要注意文件的扩展名
一定要找到并找准下滑线所指定得到那个包!
测试类是:
package org.sqs.Sprng.demo10;
import java.util.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringDemo10 {
     public static void main(String args[]){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //写一个对象数组并初始化:
        Object arg[] = new Object[]{"xiaosong",new Date()};
        //用context调用getMessage方法并设置参数:
        //userLogin表示是资源文件中的参数名称
        //arg表示参数
        //Locale是java.util.*包中的类(后面的参数表示是用的中文)(有不同的语言)
        String str = context.getMessage("userLogin",arg, Locale.US);
        System.out.println(str);
     }
}
这样的话就可以读取资源文件中的内容了!

0 0
原创粉丝点击