1. 사례 시나리오
1. 편안한 요청을 시작하고 요청 매개변수에 따라 다양한 이벤트를 게시합니다.
2. 이벤트 리스너는 이벤트를 청취한 후 예약된 작업을 수행합니다.
3. 이 예는 이벤트 동기 처리 메커니즘입니다. 즉, 이벤트가 해제된 후 이벤트가 동기적으로 모니터링됩니다.
2. spring의 이벤트 객체인
org.springframework.context.ApplicationEvent 클래스를 사용하세요.
org.springframework.context.ApplicationListener, 이벤트 리스너 인터페이스.
org.springframework.context.ApplicationEventPublisher, 이벤트 게시자 인터페이스.
3. 코드
1. 이벤트 객체
이벤트 객체는 ApplicationEvent를 구현합니다.
1.1 exampleApplicationEvent
ExampleApplicationEvent, 추상 클래스입니다. ApplicationEvent를 상속하고 마이크로서비스에 필요한 일부 속성을 사용자 정의하고 확장합니다.
public abstract class ExampleApplicationEvent extends ApplicationEvent { private static final String eventSource = "Example"; private String eventType = null; private Object eventData = null; public ExampleApplicationEvent(Object eventData) { super(eventSource); this.eventData = eventData; } public ExampleApplicationEvent(Object eventData, String eventType) { super(eventSource); this.eventData = eventData; this.eventType = eventType; } public String getEventType() { return eventType; } public Object getEventData() { return eventData; } }
1.2 예제LocalApplicationEvent
ExampleLocalApplicationEvent는 필요에 따라 속성을 확장할 수 있는 추상 클래스인 exampleApplicationEvent의 구현 클래스입니다.
public class ExampleLocalApplicationEvent extends ExampleApplicationEvent { public ExampleLocalApplicationEvent(Object eventData) { super(eventData); } public ExampleLocalApplicationEvent(Object eventData, String eventType) { super(eventData, eventType); } }
1.3 EventTypeEnum
EventTypeEnum, 사용자 정의 이벤트 유형 열거형, 요청 시 확장됨.
public enum EventTypeEnum { CHANGE("change", "变更事件"), ADD("add", "新增事件"); private String id; private String name; public String getId() { return id; } public String getName() { return name; } EventTypeEnum(String id, String name) { this.id = id; this.name = name; } public static EventTypeEnum getEventTypeEnum(String id) { for (EventTypeEnum var : EventTypeEnum.values()) { if (var.getId().equalsIgnoreCase(id)) { return var; } } return null; } }
2. 이벤트 리스너
이벤트 리스너에는 인터페이스와 추상 클래스가 포함됩니다.
2.1 인터페이스인 IEventListener
IEventListener는 ApplicationListener 인터페이스를 상속합니다.
@SuppressWarnings("rawtypes") public interface IEventListener extends ApplicationListener { }
2.2 AbstractEventListener
추상 클래스인 AbstractEventListener는 IEventListener 인터페이스를 구현합니다. 그리고 클래스 확장 및 코드 분리를 용이하게 하는 추상 메서드를 제공합니다.
public abstract class AbstractEventListener implements IEventListener { @Override public void onApplicationEvent(ApplicationEvent event){ if(!(event instanceof ExampleApplicationEvent)){ return; } ExampleApplicationEvent exEvent = (ExampleApplicationEvent) event; try{ onExampleApplicationEvent(exEvent); }catch (Exception e){ e.printStackTrace(); } } protected abstract void onExampleApplicationEvent(ExampleApplicationEvent event); }
2.3 OrderEventListener
OrderEventListener는 추상 클래스 AbstractEventListener를 구현합니다. 이벤트를 듣고 처리하는 비즈니스 수업입니다.
@Slf4j @Component public class OrderEventListener extends AbstractEventListener { @Override protected void onExampleApplicationEvent(ExampleApplicationEvent event) { log.info("OrderEventListener->onSpApplicationEvent,监听事件."); Object eventData = event.getEventData(); log.info("事件类型: " + EventTypeEnum.getEventTypeEnum(event.getEventType())); log.info("事件数据: " + eventData.toString()); } }
3. 이벤트 게시자
이벤트 리스너에는 인터페이스와 구현 클래스가 포함됩니다.
3.1 IEventPublisher
IEventPublisher, 사용자 정의 이벤트 게시 인터페이스로 기능 및 속성 확장에 편리합니다.
public interface IEventPublisher { boolean publish(ExampleApplicationEvent event); }
3.2 LocalEventPublisher
LocalEventPublisher, 이벤트 게시 구현 클래스, 이 클래스는 @Component를 사용하며 Spring의 IOC 컨테이너는 이 클래스를 로드합니다. 이 클래스는 ApplicationEventPublisher의PublishEvent를 호출하여 이벤트를 게시합니다.
@Slf4j @Component("localEventPublisher") public class LocalEventPublisher implements IEventPublisher { @Override public boolean publish(ExampleApplicationEvent event) { try{ log.info("LocalEventPublisher->publish,发布事件."); log.info("事件类型: " + EventTypeEnum.getEventTypeEnum(event.getEventType())); log.info("事件数据: " + event.getEventData().toString()); SpringUtil.getApplicationContext().publishEvent(event); }catch (Exception e){ log.info("事件发布异常."); e.printStackTrace(); return false; } return true; } }
4.Restful 요청이 이벤트를 트리거합니다
Restful 요청을 사용하여 이벤트를 트리거하세요.
4.1 EventController
EventController는 Restful 요청을 받습니다.
@Slf4j @RestController @RequestMapping("/event") public class EventController { @Autowired private LocalEventPublisher eventPublisher; @PostMapping("/f1") public Object f1(@RequestBody Object obj) { log.info("EventController->f1,接收参数,obj = " + obj.toString()); Map objMap = (Map) obj; OrderInfo orderInfo = new OrderInfo(); orderInfo.setUserName((String) objMap.get("userName")); orderInfo.setTradeName((String) objMap.get("tradeName")); orderInfo.setReceiveTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")); String flag = (String) objMap.get("flag"); if (StringUtils.equals("change", flag)) { eventPublisher.publish(new ExampleLocalApplicationEvent(orderInfo, EventTypeEnum.CHANGE.getId())); } else if (StringUtils.equals("add", flag)) { eventPublisher.publish(new ExampleLocalApplicationEvent(orderInfo, EventTypeEnum.ADD.getId())); } else { eventPublisher.publish(new ExampleLocalApplicationEvent(orderInfo)); } log.info("EventController->f1,返回."); return ResultObj.builder().code("200").message("成功").build(); } }
4.2 OrderInfo
데이터 개체인 OrderInfo가 이벤트 개체에 전달됩니다.
@Data @NoArgsConstructor public class OrderInfo { private String userName; private String tradeName; private String receiveTime; }
4.3 ResultObj
ResultObj, Restful은 공통 객체를 반환합니다.
@Data @NoArgsConstructor @AllArgsConstructor @Builder public class ResultObj { private String code; private String message; }
5. 테스트
5.1 정보 요청
URL 요청: http://127.0.0.1:8080/server/event/f1
입력 매개변수:
{ "userName": "HangZhou", "tradeName": "Vue进阶教程", "flag": "add" }
반환 값:
{ "code": "200", "message": "成功" }
5.2 로그
출력 로그:
위 내용은 SpringBoot를 기반으로 ApplicationEvent를 적용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.

이 기사에서는 분산 응용 프로그램을 구축하기위한 Java의 원격 메소드 호출 (RMI)에 대해 설명합니다. 인터페이스 정의, 구현, 레지스트리 설정 및 클라이언트 측 호출을 자세히 설명하여 네트워크 문제 및 보안과 같은 문제를 해결합니다.

이 기사는 네트워크 통신을위한 Java의 소켓 API, 클라이언트 서버 설정, 데이터 처리 및 리소스 관리, 오류 처리 및 보안과 같은 중요한 고려 사항에 대해 자세히 설명합니다. 또한 성능 최적화 기술, i

이 기사에서는 맞춤형 Java 네트워킹 프로토콜을 작성합니다. 프로토콜 정의 (데이터 구조, 프레임, 오류 처리, 버전화), 구현 (소켓 사용), 데이터 직렬화 및 모범 사례 (효율성, 보안, Mainta를 포함합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Dreamweaver Mac版
시각적 웹 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음
