`
默翁1
  • 浏览: 26902 次
社区版块
存档分类
最新评论

ApplicationContext 自定义事件

 
阅读更多

(1)定义一个Animal类,在该类中定义一个speak方法,然后监视该方法

(2)定义一个AnimalSpeakEvent方法,该方法继承ApplicationEvent,重载其默认的构造方法.当用户调用Animal类中speak方法时触发该事件

(3)写一个监听类AnimalEventListener 实现ApplicationListener,并在配置文件中配置该监听器

public class AnimalSpeakEvent extends ApplicationEvent {

	private static final long serialVersionUID = 1L;
	private String animalName;
	public AnimalSpeakEvent(Object source) {
		super(source);
	}
	
	public AnimalSpeakEvent(Object source,String animalName) {
		super(source);
		this.animalName=animalName;
	}

	public String getAnimalName() {
		return animalName;
	}
}

 

public class AnimalEventListener implements ApplicationListener{

	@Override
	public void onApplicationEvent(ApplicationEvent event) {
		if(event instanceof AnimalSpeakEvent){
			AnimalSpeakEvent a=(AnimalSpeakEvent)event;
			System.out.println(this.getClass().getSimpleName()+"有一个动物在讲话,它的名字是"+a.getAnimalName());
		}
	}

}

 

public class Animal implements ApplicationContextAware{
	private ApplicationContext ac;
	private String name;
	private int age;
	@Override
	public void setApplicationContext(ApplicationContext context)
			throws BeansException {
		this.ac=context;
	}
	public String speak(){
		ac.publishEvent(new AnimalSpeakEvent(this, this.name));
		return ("我的名字是:"+this.name+",我的年龄是:"+this.age);
	}
	public ApplicationContext getAc() {
		return ac;
	}
	public void setAc(ApplicationContext ac) {
		this.ac = ac;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
}

 

public class Test3 {
	public static void main(String[] args) {
		ApplicationContext context=new ClassPathXmlApplicationContext("config/applicationContext.xml");
		Animal animal=(Animal)context.getBean("animal");
		System.out.println(animal.speak());
	}
}

 

分享到:
评论

相关推荐

    spring的Applicationcontext对事件的监听,实现类似MQ的效果

    当你有一个需要传播的消息或事件时,你可以创建一个继承自`ApplicationEvent`的自定义事件类。 创建自定义事件类的示例如下: ```java public class MyCustomEvent extends ApplicationEvent { private String ...

    Spring中ApplicationContext对事件传递

    1. **ApplicationEvent**:这是一个抽象类,所有自定义事件都必须继承它。它用于表示一个应用程序级别的事件。 2. **ApplicationListener**:这是一个接口,任何希望监听特定事件的类都需要实现它。当一个事件被触发...

    三、Spring源码分析——ApplicationContext

    当某个事件发生时,ApplicationContext会调用所有已注册的ApplicationListener对象的onApplicationEvent方法,使得组件之间可以通过事件进行通信,而无需直接引用彼此。 5. **国际化与本地化**: ...

    Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)

    任何Bean可以通过调用`publishEvent()`方法发布自定义事件。其他Bean可以通过实现`ApplicationListener`接口来监听这些事件。这是一种有效的组件间通信方式,尤其适用于那些松散耦合的系统组件。 回到我们的项目...

    applicationContext.xml 详细配置

    <value>org/我的项目(目录)/vo(自定义包)/如:User.hbm.xml ``` 在上面的代码中,定义了两个 Bean:hibernateInterceptor 和 sessionFactory。hibernateInterceptor Bean 用于拦截 Hibernate 会话,而 ...

    使用Spring事件机制实现异步的方法

    开发者可以根据需要自定义事件和事件监听器,实现灵活的异步处理机制。 Spring事件机制的优点包括: * 松散耦合的设计理念,提高代码的可维护性和可扩展性。 * 事件机制可以解耦合业务逻辑和非业务逻辑,提高代码...

    log4j和ApplicationContext、ehcache

    Log4j的核心功能包括定义日志级别(如DEBUG、INFO、WARN、ERROR、FATAL),配置日志输出目的地(如控制台、文件、数据库等),以及使用自定义的日志格式。通过灵活的配置文件(通常为`log4j.properties`或`log4j.xml...

    Spring 2.5-applicationContext.xml提示信息的配置

    通过创建`TLD (Tag Library Descriptor)`文件,然后在`applicationContext.xml`中引用,可以实现自定义标签的提示功能。 6. **IDE集成** 要使这些提示信息在IDE中生效,需要确保IDE已经安装了Spring插件,并正确...

    深入探索Spring事件监听机制:技术与应用

    例如,如果需要在库存减少时触发一个事件,可以创建一个名为`Stock Reduced Event`的自定义事件类。 事件监听器(ApplicationListener)是响应事件的处理器。有两种方式来实现监听器:一是实现ApplicationListener...

    利用Spring Context上下文创建自定义对象

    1. **定义Bean**:在Spring配置文件(通常是`applicationContext.xml`)中,我们需要定义我们的自定义对象,也就是bean。例如,假设我们有一个名为`MyCustomObject`的类,我们可以这样定义: ```xml <!-- 可以...

    spring 时间机制

    Spring定义了一个`ApplicationEvent`抽象类,它作为所有自定义事件的基础。这些事件类代表了系统中的特定状态变化或动作,例如服务启动、数据更改等。`ApplicationEvent`包含一个`timestamp`字段,记录事件发生的...

    详解Spring事件驱动模型

    通过自定义事件和监听器,开发者可以轻松地扩展和调整应用程序的行为。同时,通过对源码的分析,我们可以更好地理解其内部的工作机制,这对于优化和调试应用程序非常有帮助。在实际开发中,Spring事件模型常用于实现...

    spring为ApplicationContext提供的3种实现分别为:ClassPathXmlApplicationContext

    在处理"档案管理.txt"这个文件时,如果是Spring配置相关的文本,可能包含了bean的定义或者一些自定义的配置,通过分析这些内容可以进一步了解Spring如何管理和使用这些配置来构建应用上下文。如果文件内容并非与...

    SpringBoot事件发布及订阅详解含代码示例(值得珍藏)

    例如,如果想要监听名为CustomEvent的自定义事件,可以创建一个实现了ApplicationListener的类。 3. @EventListener @EventListener是Spring框架提供的注解,用于简化事件监听器的配置。通过在方法上添加此注解,...

    Spring Boot技术知识点:如何读取不同路径里的applicationContext.xml配置文件6

    但是,如果我们要读取自定义路径下的`applicationContext.xml`,则需要进行一些额外的设置。 ### 自定义配置加载 1. **使用`@ImportResource`注解**:在Spring Boot的主配置类(通常标注了`@SpringBootApplication...

    SpringBoot监听器

    发布自定义事件时,可以通过`ApplicationContext`的`publishEvent`方法。 ```java // 自定义事件 public class CustomEvent extends ApplicationEvent { public CustomEvent(Object source) { super(source); } ...

    spring事件的例子

    这是一个抽象基类,用于定义所有自定义事件。例如,如果你有一个用户注册的服务,你可能会创建一个`UserRegisteredEvent`,继承自`ApplicationEvent`,并在用户成功注册时发布这个事件。 发布事件是通过`...

    event.rar-Spring事件监听机制

    自定义事件类通常包含一个表示事件具体内容的数据成员,例如`CustomEvent`类。事件源是触发事件的组件,可以通过`ApplicationEvent`的构造函数传入,并在`ApplicationEvent`的`getSource()`方法中获取。 8. **非...

    boot-example-event-2.0.5

    首先,Spring框架有一个核心概念叫做ApplicationEvent,它是所有自定义事件的基类。当你在应用中触发一个事件时,实际上就是创建一个ApplicationEvent的子类实例并发布它。在Spring Boot中,你可以通过...

    Spring Boot 自定义 Shiro 过滤器无法使用 @Autowired问题及解决方法

    Spring Boot 自定义 Shiro 过滤器无法使用 @Autowired 问题及解决方法 在 Spring Boot 中集成 Shiro 并使用 JWT 进行接口认证时,可能会遇到自定义 Shiro 过滤器无法使用 @Autowired 问题。下面将详细介绍该问题及...

Global site tag (gtag.js) - Google Analytics