zoukankan      html  css  js  c++  java
  • Spring非常用注解与技术记录

    1.注解

    @Order 注解:

    用于控制配置类(@Configuration)的加载顺序,数值越小,优先级越高 。

    @Async 注解:

    用于声明异步函数。

    @EventListener 注解:

    事件监听器,用于监听某个事件

    @PostConstruct 注解

    服务器加载Servlet的时候运行此注解标注的方法

    @PreDestroy 注解

    服务器卸载Servlet的时候运行此注解标注的方法

    2.技术

    2.1监听器

    Spring的Listener由两部分组成

    • 事件 Event (具体被监听的事件)
    • 监听器 Listener (负责监听事件)

    创建事件:

    继承 ApplicationEvent 类,用来表识这是一个事件

    public class TestEvent extends ApplicationEvent {
    
        public TestEvent(Object source) {
            super(source);
        }
    }

    定义监听器:

    两种定义监听器的方式

    • 使用 @EventListener 注解
    @EventListener
        public void onPostVisitEvent(TestEvent event) throws InterruptedException {
            handleVisitEvent(event);
        }

    实现 ApplicationListener 接口,并使用 <ApplicationStartedEvent> 表明监听的事件

    public class StartedListener implements ApplicationListener<ApplicationStartedEvent> {
        @Override
        public void onApplicationEvent(ApplicationStartedEvent event) {
            System.out.println("监听程序启动");
        }
    }

    发布事件

    相当于按钮的单击

    public class Test {
        ApplicationEventPublisher eventPublisher;
        
        public void test() {
            eventPublisher.publishEvent(new Event());
        }
    }

    2.2过滤器

    过滤用户请求,Spring中可以通过以下继承以下Bean实现

    • GenericFilterBean 通用过滤器
    • OncePerRequestFilter 每次请求过滤一次
    @Slf4j
    public class LogFilter extends OncePerRequestFilter {
    
        @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    
            String remoteAddr = ServletUtil.getClientIP(request);
    
            log.debug("");
            log.debug("Starting url: [{}], method: [{}], ip: [{}]", request.getRequestURL(), request.getMethod(), remoteAddr);
    
            // Set start time
            long startTime = System.currentTimeMillis();
    
            // Do filter
            filterChain.doFilter(request, response);
    
            log.debug("Ending   url: [{}], method: [{}], ip: [{}], status: [{}], usage: [{}] ms", request.getRequestURL(), request.getMethod(), remoteAddr, response.getStatus(), (System.currentTimeMillis() - startTime));
            log.debug("");
        }
    }

    2.3aop切面

    @Aspect
    @Slf4j
    @Component
    public class DisableOnConditionAspect {
    
        @Pointcut("@annotation(test.annotation.DisableOnCondition)")
        public void pointcut() {
        }
    
        @Around("pointcut()")
        public Object around(ProceedingJoinPoint joinPoint,
                             DisableOnCondition disableApi) throws Throwable {
            System.out.println("切入点之前的操作");
        Object resultObj = joinPoint.proceed();
        System.out.println("切入点之后的操作");
    
        // 结束
            return resultObj ;
        }
    }

    Web数据绑定器@InitBinder

    用于初始化数据绑定器, 被此注解的方法可以对WebDataBinder进行初始化

    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        // String类型转换,将所有传递进来的String进行HTML编码,防止XSS攻击
        binder.registerCustomEditor(String.class, new PropertyEditorSupport() {
            @Override
            public void setAsText(String text) {
                setValue(text == null ? null : StringEscapeUtils.escapeHtml4(text.trim()));
            }
            @Override
            public String getAsText() {
                Object value = getValue();
                return value != null ? value.toString() : "";
            }
        });
        // Date 类型转换
        binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
            @Override
            public void setAsText(String text) {
                setValue(DateUtils.parseDate(text));
            }
        });
    }

    一点点学习,一丝丝进步。不懈怠,才不会被时代所淘汰!

  • 相关阅读:
    Struts1防止重复提交
    Jquery真的不难
    原生Ajax 和Jq Ajax
    JAVA调用Oracle存储过程
    Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。
    回到基础:封装集合
    如何摆脱工具类
    泛型的古怪与优雅
    Spring MVC + Hibernate + Maven: Crud操作示例
    JDBC性能小贴
  • 原文地址:https://www.cnblogs.com/fqh2020/p/13068013.html
Copyright © 2011-2022 走看看