软件编程
位置:首页>> 软件编程>> java编程>> 详解spring中的Aware接口功能

详解spring中的Aware接口功能

作者:jiangfullll  发布时间:2023-07-02 00:36:01 

标签:spring,Aware,接口

在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<ApplicationEvent>接口的类在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 {
   private 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<SendMessageEvent>{
   /**
    * 监听事件SendMessage,当有事件发生则调用该方法
    */
   public void onApplicationEvent(SendMessageEvent event) {
       Message message = event.getMessage();
       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;
}

来源:https://www.cnblogs.com/jiangfullll/articles/5722879.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com