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;
imp
imp
imp
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;
imp
imp
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;
imp
imp
imp
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);
}
}
这样的话就可以读取资源文件中的内容了!