1. springboot中监听器的使用
1.1 监听Servlet上下文对象, 可以用在初始化,加载本地缓存
@Component
public class MyServletContextListener implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
ApplicationContext applicationContext = contextRefreshedEvent.getApplicationContext();
ServletContext application = applicationContext.getBean(ServletContext.class);
application.setAttribute("userName", "刘泽林");
}
}
ServletContext application = request.getServletContext();
String userName = application.getAttribute("user");
1.2 监听HTTP会话 Session对象
@Component
public class MyHttpSessionListener implements HttpSessionListener {
public Integer count = 0;
@Override
public synchronized void sessionCreated(HttpSessionEvent httpSessionEvent) {
count++;
httpSessionEvent.getSession().getServletContext().setAttribute("count", count);
}
@Override
public synchronized void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
count--;
httpSessionEvent.getSession().getServletContext().setAttribute("count", count);
}
}
Integer count = (Integer) request.getSession().getServletContext().getAttribute("count");
1.3 监听客户端请求Servlet Request对象
@Component
public class MyServletRequestListener implements ServletRequestListener {
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest();
}
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest();
}
}
2. 自定义监听事件
2.1 新建事件类
public class MyEvent extends ApplicationEvent {
private String userName;
public MyEvent(Object source, String userName) {
super(source);
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
2.2 新建事件监听类
@Component
public class MyEventListener implements ApplicationListener<MyEvent> {
@Override
public void onApplicationEvent(MyEvent myEvent) {
String userName = myEvent.getUserName();
System.out.println("用户名:" + userName);
}
}
2.3 发布事件
MyEvent event = new MyEvent(this, "刘泽林");
applicationContext.publishEvent(event);