原创作品,出自 “晓风残月xj
博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj)。

由于各种原因,可能存在诸多不足,欢迎斧正!

1、ApplicationContextAware

org.springframework.context.ApplicationContextAware

    实现该接口的类,可以在spring容器初始化的时候调用setApplicationContext方法,从而获得ApplicationContext中的所有bean。

  1. public class SpringUtils implements ApplicationContextAware {
  2. private static ApplicationContext applicationContext;
  3. @Override
  4. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  5. SpringUtils.applicationContext = applicationContext;
  6. synchronized (SpringUtils.class) {
  7. SpringUtils.class.notifyAll();
  8. }
  9. }
  10. private static void checkForInitialized() {
  11. if (applicationContext == null) {
  12. synchronized (SpringUtils.class) {
  13. if (applicationContext == null) {
  14. try {
  15. SpringUtils.class.wait();
  16. } catch (InterruptedException e) {
  17. Thread.currentThread().interrupt();
  18. }
  19. }
  20. }
  21. }
  22. }
  23. @SuppressWarnings("unchecked")
  24. public static <T> T bean(String name) {
  25. checkForInitialized();
  26. return (T) applicationContext.getBean(name);
  27. }
  28. public static <T> T bean(Class<T> clazz) {
  29. checkForInitialized();
  30. return applicationContext.getBean(clazz);
  31. }
  32. public static <T> Map<String, T> beans(Class<T> clazz) {
  33. checkForInitialized();
  34. return applicationContext.getBeansOfType(clazz);
  35. }
  36. }
public class SpringUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;

@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringUtils.applicationContext = applicationContext;
synchronized (SpringUtils.class) {
SpringUtils.class.notifyAll();
}
} private static void checkForInitialized() {
if (applicationContext == null) {
synchronized (SpringUtils.class) {
if (applicationContext == null) {
try {
SpringUtils.class.wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
} @SuppressWarnings("unchecked")
public static &lt;T&gt; T bean(String name) {
checkForInitialized();
return (T) applicationContext.getBean(name);
} public static &lt;T&gt; T bean(Class&lt;T&gt; clazz) {
checkForInitialized();
return applicationContext.getBean(clazz);
} public static &lt;T&gt; Map&lt;String, T&gt; beans(Class&lt;T&gt; clazz) {
checkForInitialized();
return applicationContext.getBeansOfType(clazz);
}

}

2、DisposableBean、InitializingBean
  import org.springframework.beans.factory.DisposableBean;

  import org.springframework.beans.factory.InitializingBean;

  接口实现初始化方法和销毁前操作主要有下面3种方法:

 2.1、第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作;

 2.2、第二种是:通过 在xml中定义init-method 和  destory-method方法;

 2.3、第三种是: 通过bean实现InitializingBean和 DisposableBean接口;

  1. public class PersonService  implements InitializingBean,DisposableBean{
  2. private String  message;
  3. public String getMessage() {
  4. return message;
  5. }
  6. public void setMessage(String message) {
  7. this.message = message;
  8. }
  9. @Override
  10. public void destroy() throws Exception {
  11. // TODO Auto-generated method stub
  12. System.out.println("I'm  init  method  using implements InitializingBean interface...."+message);
  13. }
  14. @Override
  15. public void afterPropertiesSet() throws Exception {
  16. // TODO Auto-generated method stub
  17. System.out.println("I'm  init  method  using implements DisposableBean interface...."+message);
  18. }
  19. }
public class PersonService  implements InitializingBean,DisposableBean{
private String  message;

public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} @Override
public void destroy() throws Exception {
// TODO Auto-generated method stub
System.out.println("I'm init method using implements InitializingBean interface...."+message); } @Override
public void afterPropertiesSet() throws Exception {
// TODO Auto-generated method stub
System.out.println("I'm init method using implements DisposableBean interface...."+message); }

}

  路漫漫其修远兮,很多时候感觉想法比较幼稚。首先东西比较简单,其次工作也比较忙,还好周末可以抽时间处理这个。由于相关知识积累有限,欢迎大家提意见斧正,在此表示感谢!后续版本会持续更新…

Spring常用工具类(ApplicationContextAware、DisposableBean、InitializingBean)的更多相关文章

  1. 2015第30周三Spring常用工具类

    文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...

  2. Spring常用工具类

    Spring框架下自带了丰富的工具类,在我们开发时可以简化很多工作: 1.Resource访问文件资源: 具体有: ResourceUtils.getFile(url); FileSystemReso ...

  3. Spring 常用工具类

    1) 请求工具类 org.springframework.web.bind.ServletRequestUtils //取请求参数的整数值: public static Integer getIntP ...

  4. spring中常用工具类介绍

    http://www.cnblogs.com/langtianya/p/3875103.html 文件资源操作     Spring 定义了一个 org.springframework.core.io ...

  5. 简单了解Spring中常用工具类_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 文件资源操作 Spring 定义了一个 org.springframework.core.io.Resource 接口, ...

  6. Maven基础&&Spring框架阶段常用工具类整理

    常用工具类 1.密码加密工具类: package com.itheima.utils; import java.security.MessageDigest; import sun.misc.BASE ...

  7. commons-lang3-3.2.jar中的常用工具类的使用

    这个包中的很多工具类可以简化我们的操作,在这里简单的研究其中的几个工具类的使用. 1.StringUtils工具类 可以判断是否是空串,是否为null,默认值设置等操作: /** * StringUt ...

  8. commons-lang常用工具类StringEscapeUtils使用--转

    https://my.oschina.net/ydsakyclguozi/blog/341496 在apache commons-lang(2.3以上版本)中为我们提供了一个方便做转义的工具类,主要是 ...

  9. js常用工具类.

    一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...

随机推荐

  1. 开源 java CMS - FreeCMS2.3会员积分记录

    原文地址:http://javaz.cn/site/javaz/site_study/info/2015/28995.html​ 项目地址:http://www.freeteam.cn/ 积分记录 从 ...

  2. nginx学习十一 nginx启动流程

    今天用了一天的时间看nginx的启动流程,流程还是非常复杂.基本的函数调用有十几个之多.通过看源代码和上网查资料,弄懂了一些函数.有些函数还在学习中,有些函数还待日后学习,这里记录一下今天所学.加油! ...

  3. Log4j日志管理的简单实例

    大型项目中非常多情况下要分析程序的日志信息,怎样管理自己的日志信息至关重要. 在应用程序中加入日志记录总的来说基于三个目的 , 监视代码中变量的变化情况,周期性的记录到文件里供其它应用进行统计分析工作 ...

  4. 1.21 Python基础知识 - python常用模块-2

    一.xml 什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 X ...

  5. 【例题 8-2 UVA-1605】Building for UN

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 两层 然后n*n就够了 第一层类似 aaa.. bbb.. ccc.. ... 第二次则变成 abc.... abc.... abc ...

  6. 【习题 7-4 UVA-818】Cutting Chains

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二进制枚举要解开哪些环. 把所有和它相关的边都删掉. 对于剩下的联通分量. 看看是不是每一个联通分量都是一条链 ->每个点的度 ...

  7. 【Codeforces Round #428 (Div. 2) C】Journey

    [Link]:http://codeforces.com/contest/839/problem/C [Description] 给一棵树,每当你到一个点x的时候,你进入x的另外一每一个出度的概率都是 ...

  8. Android 为什么要有handler机制?handler机制的原理

    为什么要有handler机制? 在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化.有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过 ...

  9. h.264硬件解码

    // H264HWDecoder.m // H264EncoderDecoder // // Created by lujunjie on 2016/11/28. // Copyright © 201 ...

  10. FansMail:邮件发送标准API与技术实现(Java)

    发送邮件,是Web系统等IT建设中最常见的一种功能. 我对最常见的一种需求进行了抽象和封装,定义了一套标准的API,并且使用Java技术实现. 项目信息 项目名称:FansMail 项目作者:LeiW ...