ApplicationContext
spring中的对象实例课通过ApplicationContext获得。
通过下面代码获得对象实例(必须先通过xml文件定义)
如下面例子
//主函数
public class StudentExample {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("BeanConfig-lab2.xml");
StudentBean student=(StudentBean)context.getBean("studentbean");
}
}
//StudentBean类
public class StudentBean {
private String name;
private int age;
public void init()
{
this.age=18;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//xml配置文件
<beans>
//init-method可指定对象的初始化方法
<bean id="studentbean" class="com.cst.spring.lab2.StudentBean" init-method="init">
//这里的name与setName对应
<property name="name">
<value>tom</value>
</property>
</bean>
</beans>
关于bean的配置不仅限与上述配置,还有许多高级配置,比如。
需实例对象中对另外的对象有依赖。
ref beaf="xxx"
表示引用一个id或name,这个bean可以在同一
个xml文件中,也可以不在当前xml文件中;不在同一文件中,使用
import来引入其他配置文件;
ref local="xxx"
表示引用当前xml 的bean
<bean class="java.unit.Date">
使用内部Bean,不需要id,只能在此处使用
对于数组、List、Set、Map等集合对象,在注入前必须填充入一些对象至集合中,然后将集合对象注入到所需的Bean,也可以由IoC容器来完成集合对象的注入;
对于数组或List类型的依赖注入,在定义文件中使用标签;对于Map类型,使用
若要注入的是properties类型,使用标签
事件监听器
在Spring应用程序执行期间,ApplicationContext本身就会发布一连串的事件,这些事件都是抽象类ApplicationEvent的子类,如果对事件感兴趣,实现接口ApplicationListener,并在定义文件中定义实现该接口的一个Bean实例。
如下面实现ApplicationListener接口的一个类用于监控学生年龄:
public class AgeListener implements ApplicationListener{
public void onApplicationEvent(ApplicationEvent arg0) {
// TODO Auto-generated method stub
if(arg0 instanceof AgeEvent) {
AgeEvent age=(AgeEvent)arg0;
StudentBean student=age.getStudent();
if(student.getAge()<16||student.getAge()>21)
{
System.out.println("学生年龄不在有效范围");
}
else
System.out.println("监听器已启用,年龄在有效范围");
}
}
}
再实现一个事件类AppliationEvent
public class AgeEvent extends ApplicationEvent{
private StudentBean student;
public AgeEvent(StudentBean student) {
super(student);
// TODO Auto-generated constructor stub
this.student=student;
}
public StudentBean getStudent()
{
return this.student;
}
}
在主函数内发布事件
public class StudentExample {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("BeanConfig-lab2.xml");
StudentBean student=(StudentBean)context.getBean("studentbean");
context.publishEvent(new AgeEvent(student));
}
}
国际化消息
ApplicationContext继承接口org.springframework.context.MessageSource接口,使用getMessage()获得文字消息,从而实现国际化消息的目的。
如下:
//先在属性文件msg_en_US.properties和msg_zh_CN.properties定义国际化资源
studentinfo=this student name is {0} and age is {1}
//中文编码
studentinfo=\u8FD9\u4E2A\u5B66\u751F\u7684\u540D\u5B57\u662F {0} \u5E74\u9F84\u662F {1}
//在配置文件中实现bean
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="msg"/>
</bean>
//主函数中定义输出
public class StudentExample {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("BeanConfig-lab2.xml");
StudentBean student=(StudentBean)context.getBean("studentbean");
//为属性文件中的{0},{1}提供值
Object[] obj=new Object[]{student.getName(),String.valueOf(student.getAge())};
//输出国际化消息 System.out.println(context.getMessage("studentinfo",obj,Locale.CHINA));
System.out.println(context.getMessage("studentinfo",obj,Locale.US));
}
}
以上便是本文的全部内容,有什么问题请指正。谢谢