4.@EventListener 监听注解
(1).@EventListener 注解监听方法事件
@EventListener: 这个注解可以标注在方法上,然后包扫描到我们这个包就可以实现我们的注解监听。
1.UserService.java
package com.jsxs.service;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
/**
* @Author Jsxs
* @Date 2023/8/27 9:02
* @PackageName:com.jsxs.service
* @ClassName: UserService
* @Description: TODO
* @Version 1.0
*/
@Service
public class UserService {
// 设置监听的注解,里面的类是被监听的类。这里我们监听 ApplicationEvent 这个类
@EventListener(classes = {ApplicationEvent.class})
public void Listener(ApplicationEvent applicationEvent){ //这里是拿到我们监听的事件,这个是固定的,
System.out.println("UserService 监听事件为...."+applicationEvent);
}
}
2.配置类什么的都和上面的一样
package com.jsxs.Test;
import com.jsxs.etx.EtxConfig;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* @Author Jsxs
* @Date 2023/8/24 10:48
* @PackageName:com.jsxs.Test
* @ClassName: IOC_ext
* @Description: TODO
* @Version 1.0
*/
public class IOC_ext {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(EtxConfig.class);
// 1.自定义发布一个事件
applicationContext.publishEvent(new ApplicationEvent(new String("我发布了一个事件")) {
});
applicationContext.close();
}
}

(五)、Spring源码总结
1.Spring源码总结
1. Spring容器在启动的时候,先保存所有注册进来的Bean定义信息
(1).xml注册bean <bean>
(2).注解: @Service ....
2.Spring容器保存定义信息之后,将会根据保存的信息在合适的时机创建Bean的实列。
(1).用到Bean的时候创建组件的实列,利用getBean的方法创建Bean。创建好的Bean实列将会保存在Spring容器中。
(2).统一创建剩下所有Bean的时候。
3.后置处理器
(1).每一个Bean创建完成,都会使用各种后置处理器进行处理,来增强我们的Bean功能,后置处理器在bean创建的各个环节中。比如 自动注入功能,Aop代理功能
4.事件驱动模型
(1).ApplicationListener 事件监听
(2).ApplicationEventMulticaster 事件派发
(六)、WEB 注解
注意事项: servlet3.0的版本要求要使用tomcat7.0+
1.简介与测试
(1).创建一个Maven的web项目

(2).创建页面支持
index.jsp
<html>
<body>
<a href="Hello">点击我跳转</a>
</body>
</html>
(3).编写后端
- 注解实现映射关系
使用@WebServlet注解之后,我们可以省略我们的web.xml的映射关系
HelloServlet .java
package com.jsxs.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author Jsxs
* @Date 2023/8/27 10:01
* @PackageName:com.jsxs.servlet
* @ClassName: HelloServlet
* @Description: TODO
* @Version 1.0
*/
@WebServlet("/Hello") // 1.设置拦截的URL,请求过来就会调用这个类的方法 ⭐
public class HelloServlet extends HttpServlet { // 2.继承Servlet 并重写两个方法 ⭐⭐
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("hello..."); ⭐⭐⭐
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
- 使用web.xml 映射关系
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 具体处理器: 具体的业务逻辑类-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.jsxs.servlet.HelloServlet</servlet-class>
</servlet>
<!-- 处理器映射器: 主要根据处理器名字和路径找具体的处理器-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
