java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring @OnApplicationEvent用法

Spring @OnApplicationEvent用法示例小结(典型用法)

作者:张紫娃

这篇文章主要介绍了Spring @OnApplicationEvent用法示例小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

典型用法

监听自定义事件

// 定义事件类
public class UserRegisteredEvent extends ApplicationEvent {
    private final String username;
    public UserRegisteredEvent(Object source, String username) {
        super(source);
        this.username = username;
    }
    public String getUsername() {
        return username;
    }
}
// 发布事件
@Service
public class UserService {
    @Autowired
    private ApplicationEventPublisher eventPublisher;
    public void registerUser(String username) {
        System.out.println("用户注册:" + username);
        eventPublisher.publishEvent(new UserRegisteredEvent(this, username));
    }
}
// 监听事件
@Component
public class UserRegistrationListener {
    @OnApplicationEvent
    public void onUserRegistered(UserRegisteredEvent event) {
        System.out.println("监听到用户注册事件:" + event.getUsername());
    }
}

监听内置 Spring 应用事件

Spring 内置了一些标准事件,可以直接使用 @OnApplicationEvent 进行监听。

// 监听应用启动完成事件
@Component
public class StartupEventListener {
    @OnApplicationEvent
    public void onApplicationReady(ApplicationReadyEvent event) {
        System.out.println("应用已启动完成");
    }
}

异步处理事件(结合 @Async)

默认情况下,事件监听是同步执行的。若希望异步处理,可结合 @Async 注解。

@Component
public class AsyncEventListener {
    @OnApplicationEvent
    @Async
    public void handleUserRegistered(UserRegisteredEvent event) {
        System.out.println("【异步】收到用户注册事件:" + event.getUsername());
    }
}

条件过滤事件(SpEL 表达式)

可以使用 condition 属性进行条件判断,仅当满足条件时才执行监听方法。

@Component
public class ConditionalEventListener {
    @OnApplicationEvent(condition = "#event.username.startsWith('admin')")
    public void onAdminUserRegistered(UserRegisteredEvent event) {
        System.out.println("管理员用户注册:" + event.getUsername());
    }
}

多事件监听(泛型支持)

一个监听方法可以监听多个事件类型,只需将参数声明为它们的共同父类或接口。

@Component
public class MultiEventLogger {
    @OnApplicationEvent
    public void logEvent(ApplicationEvent event) {
        System.out.println("监听到事件:" + event.getClass().getSimpleName());
    }
}

到此这篇关于Spring @OnApplicationEvent用法示例小结的文章就介绍到这了,更多相关Spring @OnApplicationEvent用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文