修改编译构建spring-framework源码,2024年Android大厂面试分享

,e.getClassName()

,e.getMethodName()

,e.getLineNumber()));

}

logger.info(prefix + “\n” + sbf.toString());

}

  1. 找到方法parseStringValue,注意是protected类型的那个,在该方法的起始位置添加如下两行代码:

protected String parseStringValue(

String strVal, PlaceholderResolver placeholderResolver, Set visitedPlaceholders) {

printTrack(“start parseStringValue”);

logger.info(“before parse : [” + strVal + “]”);

上述代码先是将parseStringValue被调用的堆栈打印出来,接着将入参strVal打印出来;3. 在上一步中的parseStringValue方法的结束位置,在return之前增加一行代码,将处理后的字符串打印出来,如下:

logger.info(“after parse : [” + result + “]”);

return result.toString();

}

  1. 为了避免当前电脑的其他项目用到我们构建的spring版本,我们把版本号改掉,打开gradle.properties文件,修改版本号为"4.1.88.RELEASE",如下:

version=4.1.88.RELEASE

编译构建spring-framework

  1. 用命令build -x test编译和构建工程,操作如下图所示:

  2. 等待构建完成之后,用命令install将构建的jar部署到本地maven仓库中,如下图:

  3. 去本地maven仓库看看,果然已经有文件了,如下图:

创建demo,使用本地仓库的spring-framework

基于maven创建一个java应用,以下是步骤:

  1. pom.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

4.0.0

com.bolingcavalry

springcoredemo

1.0-SNAPSHOT

org.springframework

spring-core

4.1.88.RELEASE

org.springframework

spring-context

4.1.88.RELEASE

  1. 新增文件:src/main/resources/applicationContext.xml,用于配置bean,内容如下:
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:mvc=“http://www.springframework.org/schema/mvc”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:p=“http://www.springframework.org/schema/p”

xmlns:aop=“http://www.springframework.org/schema/aop”

xmlns:tx=“http://www.springframework.org/schema/tx”

xmlns:context=“http://www.springframework.org/schema/context”

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-4.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

  1. 创建一个类:com.bolingcavalry.bean.Simple.java:

public class Simple {

public void execute() {

System.out.println(“Simple execute method”);

}

}

  1. 创建启动类com.bolingcavalry.DemoApplication.java:

public class DemoApplication {

public static void main(String[] args) {

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(“${CONFIG_PATH}”);

Simple bean = context.getBean(Simple.class);

bean.execute();

context.close();

}

}

注意以上代码中有个变量${CONFIG_PATH},这个变量的值不在代码和配置文件中,留待运行的时候再设置;5. 运行DemoApplication.java的时候,注意传入环境变量CONFIG_PATH的值,在IDEAL上的做法如下,点击红框中的"Edit Configurations…":

  1. 如下图,点击红框中的按钮:

  2. 如下图,点击红框中的加号,然后添加一个键值对,Name是"CONFIG_PATH",Value是"classpath:applicationContext.xml"

  3. 配置完毕后,点击下图红框中的绿色三角形按钮,即可运行DemoApplication的main方法,并且刚刚设置的环境变量也生效了:

  4. 运行结果如下:

C:\jdk\bin\java.exe -javaagent:C:\software\JetBrains\IntelliJIDEA\lib\idea_rt.jar=60748:C:\software\JetBrains\IntelliJIDEA\bin -Dfile.encoding=UTF-8 -classpath C:\jdk\jre\lib\charsets.jar;C:\jdk\jre\lib\deploy.jar;C:\jdk\jre\lib\ext\access-bridge-64.jar;C:\jdk\jre\lib\ext\cldrdata.jar;C:\jdk\jre\lib\ext\dnsns.jar;C:\jdk\jre\lib\ext\jaccess.jar;C:\jdk\jre\lib\ext\jfxrt.jar;C:\jdk\jre\lib\ext\localedata.jar;C:\jdk\jre\lib\ext\nashorn.jar;C:\jdk\jre\lib\ext\sunec.jar;C:\jdk\jre\lib\ext\sunjce_provider.jar;C:\jdk\jre\lib\ext\sunmscapi.jar;C:\jdk\jre\lib\ext\sunpkcs11.jar;C:\jdk\jre\lib\ext\zipfs.jar;C:\jdk\jre\lib\javaws.jar;C:\jdk\jre\lib\jce.jar;C:\jdk\jre\lib\jfr.jar;C:\jdk\jre\lib\jfxswt.jar;C:\jdk\jre\lib\jsse.jar;C:\jdk\jre\lib\management-agent.jar;C:\jdk\jre\lib\plugin.jar;C:\jdk\jre\lib\resources.jar;C:\jdk\jre\lib\rt.jar;D:\github\blog_demos\springcoredemo\target\classes;C:\Users\12167.m2\repository\org\springframework\spring-core\4.1.88.RELEASE\spring-core-4.1.88.RELEASE.jar;C:\Users\12167.m2\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;C:\Users\12167.m2\repository\org\springframework\spring-context\4.1.88.RELEASE\spring-context-4.1.88.RELEASE.jar;C:\Users\12167.m2\repository\org\springframework\spring-aop\4.1.88.RELEASE\spring-aop-4.1.88.RELEASE.jar;C:\Users\12167.m2\repository\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;C:\Users\12167.m2\repository\org\springframework\spring-beans\4.1.88.RELEASE\spring-beans-4.1.88.RELEASE.jar;C:\Users\12167.m2\repository\org\springframework\spring-expression\4.1.88.RELEASE\spring-expression-4.1.88.RELEASE.jar com.bolingcavalry.DemoApplication

七月 07, 2018 7:18:14 下午 org.springframework.util.PropertyPlaceholderHelper printTrack

信息: start parseStringValue

java.lang.Thread.getStackTrace() 1,559 <-

org.springframework.util.PropertyPlaceholderHelper.printTrack() 231 <-

org.springframework.util.PropertyPlaceholderHelper.parseStringValue() 132 <-

org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders() 126 <-

org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders() 204 <-

org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders() 178 <-

org.springframework.core.env.AbstractEnvironment.resolveRequiredPlaceholders() 571 <-

org.springframework.context.support.AbstractRefreshableConfigApplicationContext.resolvePath() 122 <-

org.springframework.context.support.AbstractRefreshableConfigApplicationContext.setConfigLocations() 80 <-

org.springframework.context.support.ClassPathXmlApplicationContext.() 137 <-

org.springframework.context.support.ClassPathXmlApplicationContext.() 83 <-

com.bolingcavalry.DemoApplication.main() 14

七月 07, 2018 7:18:14 下午 org.springframework.util.PropertyPlaceholderHelper parseStringValue

信息: before parse : [${CONFIG_PATH}]

七月 07, 2018 7:18:14 下午 org.springframework.util.PropertyPlaceholderHelper printTrack

信息: start parseStringValue

java.lang.Thread.getStackTrace() 1,559 <-

org.springframework.util.PropertyPlaceholderHelper.printTrack() 231 <-

org.springframework.util.PropertyPlaceholderHelper.parseStringValue() 132 <-

org.springframework.util.PropertyPlaceholderHelper.parseStringValue() 148 <-

org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders() 126 <-

org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders() 204 <-

org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders() 178 <-

org.springframework.core.env.AbstractEnvironment.resolveRequiredPlaceholders() 571 <-

org.springframework.context.support.AbstractRefreshableConfigApplicationContext.resolvePath() 122 <-

org.springframework.context.support.AbstractRefreshableConfigApplicationContext.setConfigLocations() 80 <-

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

七大模块学习资料:如NDK模块开发、Android框架体系架构…

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
**第三,**到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。

由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

[外链图片转存中…(img-lDqorAaR-1712060641779)]

七大模块学习资料:如NDK模块开发、Android框架体系架构…

[外链图片转存中…(img-7rPbEWDC-1712060641780)]

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
**第三,**到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。

由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值