详解spring中的Aware接口功能

网友投稿 277 2022-08-28


详解spring中的Aware接口功能

目录一,ApplicationContextAware二、ApplicationEventPublisherAware

在spring中有很多以XXXAware命名的接口,很多人也不清楚这些接口都是做什么用的,这篇文章将描述常用的一些接口。

一,ApplicationContextAware

获取spring容器,用来访问容器中定义的其他bean。实现接口方法public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {}

eg:

package org.company.xxx;

import org.springframework.beans.BeansException;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;

/**

* 获取spring容器,以访问容器中定义的其他bean

*/

public class SpringContextUtil implements ApplicationContextAware {

// Spring应用上下文环境

private static ApplicationContext applicationContext;

/**

* 实现ApplicationContextAware接口的回调方法,设置上下文环境

*/

public void setApplicationContext(ApplicationContext applicationContext)

throws BeansException {

SpringContextUtil.applicationContext = applicationContext;

}

public static ApplicationContext getApplicationContext() {

return applicationContext;

* 获取对象 这里重写了bean方法,起主要作用

*

* @param name

* @return Object 一个以所给名字注册的bean的实例

* @throws BeansException

public static Object getBean(String beanId) throws BeansException {

return applicationContext.getBean(beanId);

}

二、ApplicationEventPublisherAware

这是一个事件通知发布接口,实现public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher)方法。实现ApplicationListener接口的类在onApplicationEvent(ApplicationEvent event)方法中可以监听到这个事件通知。

eg: 源码来源:http://m.blog.csdn.net/article/details?id=50970667

定义事件:

package com.zghw.spring.demo.demo.event;

import org.springframework.context.ApplicationEvent;

/**

* 定义一个发送短信的事件

* 实现了ApplicationEvent

* @author zghw

*

*/

public class SendMessageEvent extends ApplicationEvent {

prihttp://vate static final long serialVersionUID = 1L;

//消息对象

private Message message;

//source代表了发布该事件的发布源

public SendMessageEvent(Object source,Message message) {

super(source);

this.message = message;

}

public Message getMessage() {

return message;

public void setMessage(Message message) {

}

定义监听器观察者:

package com.zghw.spring.demo.demo.event;

import org.springframework.context.ApplicationListener;

import org.springframework.stereotype.Component;

/**

* 发送短信监听器,监听到事件就开始发送。

* 实现ApplicationListener

* @author zghw

*

*/

@Component

public class SendMessageListenter implements ApplicationListener{

/**

* 监听事件SendMessage,当有事件发生则调用该方法

*/

public void onApplicationEvent(SendMessageEvent event) {

Message message = event.getMessage();

http:// String msg=message.getMessage();

String phone = message.getPhone();

try {

System.out.println("开始向手机"+phone+"发送短信,短信内容为:"+msg);

Thread.sleep(1000);

System.out.println("发送短信成功!");

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

定义事件注册中心以及发布事件主题:

package com.zghw.spring.demo.demo.event;

import org.springframework.context.ApplicationEventPublisher;

import org.springframework.context.ApplicationEventPublisherAware;

import org.springframework.stereotype.Service;

/**

* 实现ApplicationEventPublisherAware让容器ApplicationContext作为事件发布中心,

* 因为ApplicationContext实现了ApplicationEventPublisher

* @author zghw

*

*/

@Service

public class UserService implements ApplicationEventPublisherAware{

private ApplicationEventPublisher publisher;

public void registerUser(String name,String phone) throws InterruptedException{

System.out.println("注册用户中");

Thread.sleep(300);

System.out.println("注册完成!");

Message message=new Message();

message.setMessage("你好,"+name+" 你中了1000W");

message.setPhone(phone);

SendMessageEvent event=new SendMessageEvent(this,message);

//发布中心发布事件

publisher.publishEvent(event);

}

/**

* 实现ApplicationEventPublisherAware的方法,spring在使用时UserServicebean对象时会自动帮我们注入

* ApplicationEventPublisher的实现

*/

public void setApplicationEventPublisher(

ApplicationEventPublisher applicationEventPublisher) {

this.publisher = applicationEventPublisher;

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Pycharm之pytest模式(run pytest in xxx 模式)【注意与run模式的区分(run xxx)】(PYTEST)
下一篇:pytest之allure(一)之生成测试报告(mac系统)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~