博客
关于我
零碎知识总结[一]
阅读量:166 次
发布时间:2019-02-28

本文共 3581 字,大约阅读时间需要 11 分钟。

Spring配置注解context:annotation-config和context:component-scan的区别

context:annotation-config

context:annotation-config 是用来激活已经注册在Spring容器中的Bean上的注解。它的作用是向Spring注册已经存在的Bean,使其能够识别并处理相关的注解。常见的注解包括@Resource、@PostConstruct、@Autowired等。

这种方式的优势在于可以简化手动配置,避免了逐一配置每一个注解的繁琐过程。例如,在Spring MVC项目中,如果需要启用注解,可以通过配置文件或注解驱动来实现。

context:component-scan

context:component-scan 是一个更强大的配置方式,它不仅能激活已经注册的Bean上的注解,还能自动扫描指定包下的类,发现带有@component、@service、@repository等注解的Bean,并将它们注册到Spring容器中。这种方式特别适合处理组件化开发,能够自动管理POJO的生命周期。

示例配置

上述配置会扫描com.example.service包下的所有类,发现带有相应注解的Bean并进行注册。

总结

  • context:annotation-config:仅能在已有Bean上激活注解,无法处理未注册的Bean。
  • context:component-scan:不仅能激活注解,还能自动扫描和注册带有特定注解的Bean。
  • 在Spring MVC项目中,使用mvc:annotation-driven会自动启用Spring注解,通常不需要单独配置tx:annotation-config
  • 自我见解

  • 自动化配置:在Spring项目中,尽量使用自动化配置工具如@Conditional、@Profile等,减少手动配置的工作量。
  • 第三方框架集成:在集成第三方框架时,合理使用如Dubbo的注解配置,避免重复配置。
  • Spring MVC优化:在Spring MVC项目中,通过mvc:annotation-driven和相关拦截器优化注解驱动开发体验。
  • 组件化开发:在组件化项目中,推荐使用@component-scan等自动扫描工具,简化配置管理。

  • setInterval与setInterval的区别

    setInterval

    setInterval方法会立即执行一次目标函数,并在指定的间隔时间后重复执行。它不会将函数引用存储起来,因此只会执行一次。

    setInterval

    setInterval方法会将函数引用存储起来,并在指定的间隔时间后不断重复执行。这种方式更适合回调函数,能够持续多次调用。

    示例

    // 只执行一次setInterval(function() {  // 操作}, 1000);// 持续执行setInterval(function() {  // 操作}, 1000);

    判断对象或集合是否为空的工具类

    CollectionUtils.isNotEmpty()

    这是Spring提供的工具类,用于判断集合或数组是否为空。它适用于处理数据库返回的NULL值,能够识别null、空集合、空数组等多种情况。

    示例

    List
    names = new ArrayList<>();if (!CollectionUtils.isNotEmpty(names)) { // 处理非空数据}

    StringUtils.equals()

    Spring的StringUtils类用于比较字符串是否相等,支持null值和大小写转换。它适用于验证用户输入或对比数据。

    示例

    String code1 = "abc";String code2 = "ABC";if (StringUtils.equals(code1, code2)) {  // 相等处理}

    认证与授权

    认证

    认证的核心是用户登录时的身份验证。通常只需要用户表,通过用户名和密码匹配用户信息即可完成认证。

    授权

    授权是基于认证的,用户首先需要完成认证后,根据其角色和权限确定可访问的资源。常见流程包括:

  • 根据用户查询角色。
  • 根据角色查询菜单。
  • 根据权限确定访问的资源。

  • 数据库中日期查询问题

    问题

    在MySQL中,日期查询不区分大小写可能导致数据不一致。例如,name='abc'name='ABC'可能返回相同的结果。

    解决方案

  • 使用BINARY关键字:
    CREATE TABLE user (  name CHAR(20) BINARY)
  • 在查询时使用BINARY
    SELECT * FROM user WHERE name = 'abc' Collate Binary = 'utf8mb4_unicode_ci'

  • mybatis中的符号限制

    在mybatis中,><等符号通常需要转义,避免与XML解析产生冲突。正确的做法是使用HTML实体或转义字符。

    示例


    后台接收前台传入的值

    前台传入的值通常以JSON格式发送,后台接收方式主要有两种:

  • Map类型{ "name": "abc", "age": 20 }
  • List类型[ { "name": "abc", "age": 20 } ]

  • 经典SQL语句示例

    查询套餐名称及其数量

    SELECT s.name, COUNT(o.id) AS value FROM t_order oINNER JOIN t_setmeal s ON o.setmeal_id = s.idGROUP BY s.name

    查询热门套餐前4名

    SELECT s.name, COUNT(o.id) setmeal_count,       COUNT(o.id) / (SELECT COUNT(id) FROM t_order) AS proportionFROM t_order oINNER JOIN t_setmeal s ON s.id = o.setmeal_idGROUP BY o.setmeal_idORDER BY setmeal_count DESCLIMIT 4

    Lombok中的@Slf4j

    等级

    • Debug
    • Info
    • Warn
    • Error
    • Fatal

    区别

    • Debug:调试信息,通常用于开发阶段。
    • Info:信息日志,用于正常运行信息。
    • Warn:警告信息,提示需要注意的问题。
    • Error:错误日志,表示系统运行出现问题。
    • Fatal:严重错误,可能导致系统无法继续运行。

    使用示例

    import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class LogTest {    private static final Logger logger = LoggerFactory.getLogger(LogTest.class);    public static void main(String[] args) {        logger.debug("这是一个调试日志");        logger.info("这是一个信息日志");        logger.warn("这是一个警告日志");        logger.error("这是一个错误日志");        logger.fatal("这是一个严重错误");    }}

    忽略测试等打包方式

    在某些项目中,为了避免测试类占用空间,可以通过忽略打包方式来解决。常见的忽略方式包括:

  • 使用exclude元素:
    org.apache.maven.plugins
    maven-source-plugin
    3.2.0
    attach-sources
    jar-no-fork
    (?<=\\d-)\\d+(\\.\\d+)?(\\W\\w+)?\\.jar$
  • 使用maven插件管理测试类:
    mvn clean install -DskipTest
  • 转载地址:http://ymdj.baihongyu.com/

    你可能感兴趣的文章
    Vue3.0 性能提升主要是通过哪几方面体现的?
    查看>>
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    查看>>
    NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
    查看>>
    NLP三大特征抽取器:CNN、RNN与Transformer全面解析
    查看>>
    NLP学习笔记:使用 Python 进行NLTK
    查看>>
    NLP度量指标BELU真的完美么?
    查看>>
    NLP的不同研究领域和最新发展的概述
    查看>>
    NLP的神经网络训练的新模式
    查看>>
    NLP采用Bert进行简单文本情感分类
    查看>>
    NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
    查看>>
    NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
    查看>>
    NLP:使用 SciKit Learn 的文本矢量化方法
    查看>>
    nmap 使用方法详细介绍
    查看>>
    Nmap扫描教程之Nmap基础知识
    查看>>
    nmap指纹识别要点以及又快又准之方法
    查看>>
    Nmap渗透测试指南之指纹识别与探测、伺机而动
    查看>>
    Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
    查看>>
    NMAP网络扫描工具的安装与使用
    查看>>
    NMF(非负矩阵分解)
    查看>>
    nmon_x86_64_centos7工具如何使用
    查看>>