博客
关于我
零碎知识总结[一]
阅读量: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/

    你可能感兴趣的文章
    Nginx配置负载均衡到后台网关集群
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>