文档章节

Spring常用的接口和类(一)

SPPan
 SPPan
发布于 2017/05/31 15:17
字数 587
阅读 9
收藏 0

介绍以下类接口:

  1. ApplicationContextAware接口
  2. ApplicationEvent抽象类
  3. ApplicationListener接口
  4. BeanNameAware接口
  5. InitializingBean接口
  6. DisposableBean接口

一、ApplicationContextAware接口

当一个类需要获取ApplicationContext实例时,可以让该类实现ApplicationContextAware接口。代码展示如下:

public class Animal implements ApplicationContextAware, BeanNameAware{
	private String beanName;
	private ApplicationContext applicationContext;
	public void setBeanName(String name) {
		this.beanName = name;
	}
	
	/**
	 * @param applicationContext 该参数将由Spring容器自动赋值
	 */
	public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {
		this.applicationContext = applicationContext;
	}
	public void run(){
		System.out.println(beanName);
		
		//发布自定义事件
		AnimalEvent event = new AnimalEvent(this, "老虎");
		applicationContext.publishEvent(event);
	}
}

通过@Autowired注解可以自动装配一些常用对象实例:

@Autowired
private MessageSource messageSource; 
@Autowired
private ResourceLoader resourceLoader; 
@Autowired
private ApplicationContext applicationContext;

二、ApplicationEvent抽象类

当需要创建自定义事件时,可以新建一个继承自ApplicationEvent抽象类的类。代码展示如下:

/**
 * 自定义事件
 */
public class AnimalEvent extends ApplicationEvent {
	private String name;
	
	public String getName() {
		return name;
	}
	/**
	 * @param source 事件源对象
	 */
	public AnimalEvent(Object source){
		super(source);
	}
	
	public AnimalEvent(Object source, String name){
		super(source);
		this.name = name;
	}
}

三、ApplicationListener接口

当需要监听自定义事件时,可以新建一个实现ApplicationListener接口的类,并将该类配置到Spring容器中。代码展示如下:

/**
 * 自定义事件监听器
 */
public class CustomEventListener implements ApplicationListener {
	public void onApplicationEvent(ApplicationEvent event) {
		if(event instanceof AnimalEvent){
			AnimalEvent animalEvent = (AnimalEvent)event;
			System.out.println("触发自定义事件:Animal name is " + animalEvent.getName());
		}
	}
}

注:如果是在springboot项目中,需要监听所有的事件,则需要在application.properties中配置

context.listener.classes=net.sppan.base.config.listener.CustomEventListener

要发布自定义事件,需要调用ApplicationContext的publishEvent方法,具体用法请看Animal类的源码。

四、BeanNameAware接口

当bean需要获取自身在容器中的id/name时,可以实现BeanNameAware接口。

五、InitializingBean接口

当需要在bean的全部属性设置成功后做些特殊的处理,可以让该bean实现InitializingBean接口。 效果等同于bean的init-method属性的使用或者@PostContsuct注解的使用。 三种方式的执行顺序:先注解,然后执行InitializingBean接口中定义的方法,最后执行init-method属性指定的方法。

六、DisposableBean接口

当需要在bean销毁之前做些特殊的处理,可以让该bean实现DisposableBean接口。 效果等同于bean的destroy-method属性的使用或者@PreDestory注解的使用。 三种方式的执行顺序:先注解,然后执行DisposableBean接口中定义的方法,最后执行destroy-method属性指定的方法。

© 著作权归作者所有

共有 人打赏支持
SPPan
粉丝 10
博文 29
码字总数 15103
作品 0
成都
程序员
私信 提问
Spring注解事务@Transactional

在声明式事务中我们比较常用的有两种:一种是基于tx和aop命名空间的xml文件。第二种是基于@Transactional的注解。两种都比较常用。前一种只要定义好规范就可以按照规范对方法进行命名。第二种...

u014231523
2017/02/27
0
0
分析总结Spring管理Hibernate中Dao层访问数据库常用方式(附SSH的jar包)

上篇博客中已经讲解Spring配置数据源的常用的几种方式。接下来本篇博客继续讲解。配置完数据源,那Dao层是如何访问数据库呢? 基于最近的项目使用SSH2框架完成,分析总结Spring与Hibernate集...

晨曦之光
2012/08/22
588
0
一步步学习 Spring Data 系列之JPA(一)

大概有半年多没有写博客了,主要是最近忙于工作,也没来得及与大家分享技术。当然现在的技术大多都有人写其博客分享了,也找不到合适写的,所以也就懒得写了。最近在SpringSource上看到了一好...

张廷
2012/07/23
0
3
SPRING注解发布RMI/HTTPInvoker/Hessian/Burlap服务

最近做系统重构,计划将多个系统的公共部分抽取出来作为一项公共服务,为以后项目维护和横向扩展奠定基础。 常用的服务发布方式有RMI / HTTPInvoker / Hessian / Burlap,关于这几类java远程...

大米被占用
2014/12/09
0
9
Spring与MyBatis整合

序言 在MyBatis学习中,我们会发现很多重复性的代码,例如: //创建连接 private SqlSessionFactory sqlSessionFactory = SessionFactoryUtils .getSessionfactory().getSqlSessionFactory(......

开源俱乐部
2014/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

走上真正的教育之路——《中国最美的语文》读后感3100字

走上真正的教育之路——《中国最美的语文》读后感3100字: 文:张平。《中国最美的语文》,乍一听,你可能会觉得这个作者或者编辑有些大言不惭,竟然起这么大而狂的名字,可能名不副实。我没...

原创小博客
24分钟前
2
0
tomcat线程模型

Connector结构 BIO模式 NIO模式

grace_233
45分钟前
2
0
Javascript

变量定义 以$,_,字母开头 大小写敏感 var 关键字声明变量 声明未赋值undefined 数据类型 字符串,数字,布尔,数组,NULL,undefined 变量均为对象 函数 无默认值 var声明的是局部变量 函数外声明...

关元
46分钟前
1
0
文件系统、服务、防火墙、SELINUX——安全四大金刚

一提到安全,大家都会想到防火墙,和文件系统权限。而实际工作环境中,我们在Linux的安全配置,会涉及到四个级别。我们思考一个场景,你要在百度盘中存放一个文件,这个动作需要考虑下面四个...

Linux就该这么学
47分钟前
3
0
从源码角度理解Java设计模式——门面模式

一、门面模式介绍 门面模式定义:也叫外观模式,定义了一个访问子系统的接口,除了这个接口以外,不允许其他访问子系统的行为发生。 适用场景:子系统很复杂时,增加一个接口供外部访问。 优...

我叫刘半仙
57分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部