文档章节

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
粉丝 11
博文 29
码字总数 15103
作品 0
成都
程序员
私信 提问
Spring注解事务@Transactional

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

u014231523
2017/02/27
0
0
深入聊一聊 Spring AOP 实现机制!

作者 | 张书康 责编 | 郭 芮 AOP(Aspect-Oriented Programming,即面向切面编程。Spring Aop 在 Spring框架中的地位举足轻重,主要用于实现事务、缓存、安全等功能。本篇主要是对源码进行深...

CSDN资讯
01/26
0
0
【转】SpringMVC、Spring的Bean

一、简述Spring Spring是一个轻量级的Java 开发框架。他使用基本的JavaBean来完成以前只可能由EJB【Enterprise JavaBean】完成的事情。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向...

涅槃Ls
2017/04/07
0
0
SpringBoot系列之AOP实现的两种方式

AOP常用的实现方式有两种,一种是采用声明的方式来实现(基于XML),一种是采用注解的方式来实现(基于AspectJ)。 首先复习下AOP中一些比较重要的概念: Joinpoint(连接点):程序执行时的...

文文1
03/11
0
0
分析总结Spring管理Hibernate中Dao层访问数据库常用方式(附SSH的jar包)

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

晨曦之光
2012/08/22
588
0

没有更多内容

加载失败,请刷新页面

加载更多

vue预渲染

prerender-spa-plugin 安装prerender-spa-plugin (插件使用见npm官网)[https://www.npmjs.com/package/prerender-spa-plugin] npm install prerender-spa-plugin --save-dev 配置prerender-s......

莫西摩西
21分钟前
0
0
Command模式

https://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html

南桥北木
56分钟前
1
0
由于PostgreSQL9.x二进制输出格式默认值改变导致的读取图片错误

今天从社区邮件看到一个这样的问题,感觉很有意思,在这分享给大家~具体如下: 问题现象: 作者有一个很老的Java应用,当时后端采用的PostgreSQL数据库版本为8.x,该系统除了正常的数据增删...

闻术苑
今天
2
0
导入sql时出现Invalid default value for 'create_time'报错处理方法

当运行SQL会出现:[Err] 1067 - Invalid default value for 'create_time',是因为Mysql版本不同,如果版本不 < 5.6请去的话报错的处理方法如下: 方法 :alter table table_name modify cre......

writeademo
今天
1
0
对ssm(spring,springmvc,mybatis)的了解总结

ssm框架现在是java web开发的三个主流框架 ,其实严格来算只算是两个框架,因为springmvc属于spring框架 ,是spring的一个mvc子框架 那么我们下面就来了解一下三大框架把 一 .Spring spring...

咸鱼-李y
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部