文档章节

ApplicationContextAware接口的使用

小泽玛丽罗
 小泽玛丽罗
发布于 2015/12/01 21:30
字数 311
阅读 5
收藏 0

如果一个对象希望可以取得这个对象运行所在的容器信息(ApplicationContext)的话,这个对象

不妨实现这个接口(ApplicationContextAware)。

继承这个接口,可以获取应用启动时,spring 容器已经实例化的bean,而不用自己再去实例化重复的类,浪费资源。

项目开发系统应用的日志记录到数据库中去,于是就想用线程池方式,提交任务到线程池,然后并发的统一的记录日志。

所以需要把DaXtLogService 初始化到Runnable中去。

package com.dangan.bean;

import javax.annotation.Resource;
import javax.swing.Spring;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContextAware;

import com.dangan.dao.impl.DaXtLogDaoImpl;
import com.dangan.dao.pojo.DaXtLog;
import com.dangan.service.DaXtLogService;
import com.dangan.service.impl.DaXtLogServiceImpl;
import com.dangan.utils.SpringContextUtils;

public class LogRunnable implements Runnable {
	
	private DaXtLog daXtLog;
	private DaXtLogService daXtLogService;

	public LogRunnable(String type, String description, int humanId,
			String humanName, String ip, String flh) {
		daXtLog=new DaXtLog(humanId, humanName, ip, type, description, flh);
		daXtLogService=(DaXtLogService) SpringContextUtils.getObject("daXtLogService");
	}


	@Override
	public void run() {
		if(daXtLog!=null){
			try {
				daXtLogService.save(daXtLog);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

}
package com.dangan.utils;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;

import com.dangan.dao.pojo.DaXtLog;

public class LogService {
	private final BlockingQueue<DaXtLog> logsQueue=new LinkedBlockingQueue<DaXtLog>();
	private ExecutorService executorService=Executors.newScheduledThreadPool(3);
	
	private static final LogService logService=new LogService();
	
	public static LogService getInstance(){
			
		return logService;
	}
	
	
	public void log(Runnable logRunnable){
		executorService.submit(logRunnable);
	} 
}
package com.dangan.utils;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringContextUtils implements ApplicationContextAware{
	private static ApplicationContext applicationContext;
	
	@Override
	public void setApplicationContext(ApplicationContext arg0)
			throws BeansException {
		this.applicationContext=arg0;
	}
	
	public static Object getObject(String beanId){
		return applicationContext.getBean(beanId);
	}
}


© 著作权归作者所有

共有 人打赏支持
小泽玛丽罗
粉丝 11
博文 57
码字总数 17545
作品 0
杭州
私信 提问
Spring中ApplicationContextAware使用说明

Spring 中提供一些Aware相关接口,像是BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,实作这些 Aware接口的Bean在被初始之后,可以取得一些相...

Josean_Luo
2014/06/07
0
0
非注入方式取得spring注入bean的util类实现

实现ApplicationContextAware的Bean,在Bean被初始后,将会被注入ApplicationContext的实例。 这样在spring配置文件加载时会自动执行ApplicationContextAware的setApplicationContext方法,将...

伊人梦醉
2016/06/20
203
0
Spring 4.2 感知接口

1 ApplicationContextAware 当一个ApplicationContext创建一个实现org.springframework.context.ApplicationContextAware接口的实例时,为实例提供一个ApplicationContext引用。 public int......

Leech
2015/08/07
0
1
Spring 定时任务重复执行的问题分析

Spring 定时任务重复执行的问题分析 背景:使用quartz时客户现场不知道为什么跑着跑着就停了,后来决定换成spring定时任务。 当使用spring定时任务时莫名奇妙的就是同一时间重复执行多次任务...

huxy534
2017/05/11
0
0
Spring中普通类调用bean的方法

参考网址 http://412887952-qq-com.iteye.com/blog/2292388 为什么要使用 因为有这样一类需求: 普通的Java类(没有在Spring容器中管理的类),想直接使用Spring容器管理的对象(比如@Servic...

karma123
01/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

技术复习-Spring事务

spring事务 1.事务传播机制 在spring中事务存在嵌套的情况,在这种情况下事务如何协调,spring在TransactionDefinition中设了七个规则,被称作事务的传播机制 1.TransactionDefinition.PROP...

Lubby
21分钟前
1
0
linux 虚拟机安装

一、虚拟化检查 1. 检查cpu是否支持 grep -E 'vmx|svm' /proc/cpuinfo 2. 检查虚拟化是否开启 lsmod |grep kvm 显示内容与截图一致,服务器已经开启了虚拟化的支持,如果没有前2条内容,...

小儿
21分钟前
2
0
Linux之系统日志简介

前言 日志在排查文件的时候至关重要,在Linux上一般跟系统相关的日志默认都会放到/var/log下面。 1、/var/log/boot.log 一般包含系统启动时的日志,包括自启动的服务。 2、/var/log/btmp 记录...

城市之雾
22分钟前
1
0
Android数据存储2 文件存储

1.内部存储(私有的,其他程序不能获取) a. 存:FileOutputStream fos = openFileOutput("file", MODE_PRIVATE); 读: FileInputStream fis = openFileInput("file"); 文件路径:data/data/当......

Coding缘
22分钟前
1
0
23种设计模式全解析

一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理...

嘿嘿嘿IT
23分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部