(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()); } }
相关推荐
当你有一个需要传播的消息或事件时,你可以创建一个继承自`ApplicationEvent`的自定义事件类。 创建自定义事件类的示例如下: ```java public class MyCustomEvent extends ApplicationEvent { private String ...
1. **ApplicationEvent**:这是一个抽象类,所有自定义事件都必须继承它。它用于表示一个应用程序级别的事件。 2. **ApplicationListener**:这是一个接口,任何希望监听特定事件的类都需要实现它。当一个事件被触发...
当某个事件发生时,ApplicationContext会调用所有已注册的ApplicationListener对象的onApplicationEvent方法,使得组件之间可以通过事件进行通信,而无需直接引用彼此。 5. **国际化与本地化**: ...
任何Bean可以通过调用`publishEvent()`方法发布自定义事件。其他Bean可以通过实现`ApplicationListener`接口来监听这些事件。这是一种有效的组件间通信方式,尤其适用于那些松散耦合的系统组件。 回到我们的项目...
<value>org/我的项目(目录)/vo(自定义包)/如:User.hbm.xml ``` 在上面的代码中,定义了两个 Bean:hibernateInterceptor 和 sessionFactory。hibernateInterceptor Bean 用于拦截 Hibernate 会话,而 ...
开发者可以根据需要自定义事件和事件监听器,实现灵活的异步处理机制。 Spring事件机制的优点包括: * 松散耦合的设计理念,提高代码的可维护性和可扩展性。 * 事件机制可以解耦合业务逻辑和非业务逻辑,提高代码...
Log4j的核心功能包括定义日志级别(如DEBUG、INFO、WARN、ERROR、FATAL),配置日志输出目的地(如控制台、文件、数据库等),以及使用自定义的日志格式。通过灵活的配置文件(通常为`log4j.properties`或`log4j.xml...
通过创建`TLD (Tag Library Descriptor)`文件,然后在`applicationContext.xml`中引用,可以实现自定义标签的提示功能。 6. **IDE集成** 要使这些提示信息在IDE中生效,需要确保IDE已经安装了Spring插件,并正确...
例如,如果需要在库存减少时触发一个事件,可以创建一个名为`Stock Reduced Event`的自定义事件类。 事件监听器(ApplicationListener)是响应事件的处理器。有两种方式来实现监听器:一是实现ApplicationListener...
1. **定义Bean**:在Spring配置文件(通常是`applicationContext.xml`)中,我们需要定义我们的自定义对象,也就是bean。例如,假设我们有一个名为`MyCustomObject`的类,我们可以这样定义: ```xml <!-- 可以...
Spring定义了一个`ApplicationEvent`抽象类,它作为所有自定义事件的基础。这些事件类代表了系统中的特定状态变化或动作,例如服务启动、数据更改等。`ApplicationEvent`包含一个`timestamp`字段,记录事件发生的...
通过自定义事件和监听器,开发者可以轻松地扩展和调整应用程序的行为。同时,通过对源码的分析,我们可以更好地理解其内部的工作机制,这对于优化和调试应用程序非常有帮助。在实际开发中,Spring事件模型常用于实现...
在处理"档案管理.txt"这个文件时,如果是Spring配置相关的文本,可能包含了bean的定义或者一些自定义的配置,通过分析这些内容可以进一步了解Spring如何管理和使用这些配置来构建应用上下文。如果文件内容并非与...
例如,如果想要监听名为CustomEvent的自定义事件,可以创建一个实现了ApplicationListener的类。 3. @EventListener @EventListener是Spring框架提供的注解,用于简化事件监听器的配置。通过在方法上添加此注解,...
但是,如果我们要读取自定义路径下的`applicationContext.xml`,则需要进行一些额外的设置。 ### 自定义配置加载 1. **使用`@ImportResource`注解**:在Spring Boot的主配置类(通常标注了`@SpringBootApplication...
发布自定义事件时,可以通过`ApplicationContext`的`publishEvent`方法。 ```java // 自定义事件 public class CustomEvent extends ApplicationEvent { public CustomEvent(Object source) { super(source); } ...
这是一个抽象基类,用于定义所有自定义事件。例如,如果你有一个用户注册的服务,你可能会创建一个`UserRegisteredEvent`,继承自`ApplicationEvent`,并在用户成功注册时发布这个事件。 发布事件是通过`...
自定义事件类通常包含一个表示事件具体内容的数据成员,例如`CustomEvent`类。事件源是触发事件的组件,可以通过`ApplicationEvent`的构造函数传入,并在`ApplicationEvent`的`getSource()`方法中获取。 8. **非...
首先,Spring框架有一个核心概念叫做ApplicationEvent,它是所有自定义事件的基类。当你在应用中触发一个事件时,实际上就是创建一个ApplicationEvent的子类实例并发布它。在Spring Boot中,你可以通过...
Spring Boot 自定义 Shiro 过滤器无法使用 @Autowired 问题及解决方法 在 Spring Boot 中集成 Shiro 并使用 JWT 进行接口认证时,可能会遇到自定义 Shiro 过滤器无法使用 @Autowired 问题。下面将详细介绍该问题及...