return "Hello Spring Boot!";

    }

    

}



```



运行项目没有报任何错误,然后在浏览器中访问:localhost:8080/demo/hello,如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/ad4ef1d6b4ab463191af0eacdc9fbbf2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYW5kcm9pZF9jYWlfbmlhbw==,size_15,color_FFFFFF,t_70,g_se,x_16)  

如上图,并没有出现我们期待的"Hello Spring Boot!"字符串,控制台也没有出现错误,见鬼了。如果开始创建Spring Boot项目的时候选择了Java语言,就不会有这个问题,开始我还怀疑是Spring Boot不支持Kotlin语言吗?仔细一想也不对啊,创建的时候明明有Kotlin可以选择就说明了是支持Kotlin语言的,后来是一不小心就解决了这个问题的:当我把MainController转换为Kotlin语言后就好了,具体原因不详,Kotlin和Java是可以同时存在的,只能说这是Spring Boot的坑。MainController转换为Kotlin语言如下:



```

@RestController

@RequestMapping("/demo")

class MainController {

    

    @GetMapping("hello")

    fun hello(): String {

        return "Hello Spring Boot!"

    }

    

}



```



此时我们重新运行项目,并再次访问:localhost:8080/demo/hello,如下:  

![在这里插入图片描述](https://img-blog.csdnimg.cn/9bd9cba7cf3b4f65b38fc6cc88f88f36.png)
  1. Spring Boot的另外一个坑,其实和上面也是同一个坑来的,但是

    数据库访问我是完全参考的官方文档:https://spring.io/guides/gs/accessing-data-mysql/

    在官方教程中,还有一个User和UserRepository,我也是直接复制过来的,是Java代码,后来把MainController转换为了Kotlin,而User和UserRepository并没有转换为Java,运行时报如下错误:

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘mainController’

    一开始我还不知道Spring Boot和Kotlin有兼容问题的时候,我就在百度或Google上搜索这个错误信息,文章是有许多的,但是没有一个能解决我的问题的。

    完整异常信息如下:

    
    Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    
    2021-09-18 10:04:20.292 ERROR 8820 --- [           main] o.s.boot.SpringApplication               : Application run failed
    
    
    
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mainController' defined in file [C:\Users\Even\Downloads\gs-accessing-data-mysql-main\HelloB\build\classes\kotlin\main\com\example\hellob\MainController.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.example.hellob.MainController] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@2437c6dc]
    
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:579) ~[spring-beans-5.3.9.jar:5.3.9]
    
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9]
    
    	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9]
    
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9]
    
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9]
    
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9]
    
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.9.jar:5.3.9]
    
    	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.9.jar:5.3.9]
    
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.9.jar:5.3.9]
    
    	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.4.jar:2.5.4]
    
    	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.4.jar:2.5.4]
    
    	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.4.jar:2.5.4]
    
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.4.jar:2.5.4]
    
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.4.jar:2.5.4]
    
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.4.jar:2.5.4]
    
    	at com.example.hellob.HelloBApplicationKt.main(HelloBApplication.kt:13) ~[main/:na]
    
    Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.example.hellob.MainController] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@2437c6dc]
    
    	at org.springframework.util.ReflectionUtils.getDeclaredFields(ReflectionUtils.java:739) ~[spring-core-5.3.9.jar:5.3.9]
    
    	at org.springframework.util.ReflectionUtils.doWithLocalFields(ReflectionUtils.java:671) ~[spring-core-5.3.9.jar:5.3.9]
    
    	at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:407) ~[spring-orm-5.3.9.jar:5.3.9]
    
    	at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:388) ~[spring-orm-5.3.9.jar:5.3.9]
    
    	at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:335) ~[spring-orm-5.3.9.jar:5.3.9]
    
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1098) ~[spring-beans-5.3.9.jar:5.3.9]
    
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576) ~[spring-beans-5.3.9.jar:5.3.9]
    
    	... 15 common frames omitted
    
    Caused by: java.lang.NoClassDefFoundError: Lcom/example/hellob/UserRepository;
    
    	at java.base/java.lang.Class.getDeclaredFields0(Native Method) ~[na:na]
    
    	at java.base/java.lang.Class.privateGetDeclaredFields(Class.java:3061) ~[na:na]
    
    	at java.base/java.lang.Class.getDeclaredFields(Class.java:2248) ~[na:na]
    
    	at org.springframework.util.ReflectionUtils.getDeclaredFields(ReflectionUtils.java:734) ~[spring-core-5.3.9.jar:5.3.9]
    
    	... 21 common frames omitted
    
    Caused by: java.lang.ClassNotFoundException: com.example.hellob.UserRepository
    
    	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na]
    
    	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
    
    	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
    
    	... 25 common frames omitted
    
    
    
    

    后来也是无意中把所有类都转换为Kotlin时发现就正常了,所以,总结就是,在Spring Boot项目中,不要混用Kotlin和Java,不然会出现你意想不到的问题。怪不得我们的后台还没开始使用Kotlin语言来开发,或许这也是原因之一。而在Android上Kotlin和Java就能很好的整合在一起。

完整Spring Boot MySQL项目创建流程

========================================================================================

  1. 创建Spring Boot项目,在选择依赖项的时候添加:Spring Web、Spring Data JPA、MySQL Driver

  2. 在MySQL中创建好数据库(注:只需要创建好数据库,表可以不建,因为在Spring Boot中可以用代码来创建表)

  3. 在application.properties中添加数据库连接配置:

    
    spring.jpa.hibernate.ddl-auto=update
    
    spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/db_example
    
    spring.datasource.username=springuser
    
    spring.datasource.password=ThePassword
    
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    spring.jpa.open-in-view=true
    
    #spring.jpa.show-sql: true
    
    
    
    
  • 创建对应数据库表的JavaBean:User

    
    import javax.persistence.Entity
    
    import javax.persistence.GeneratedValue
    
    import javax.persistence.GenerationType
    
    import javax.persistence.Id
    
    
    
    @Entity
    
    class User {
    
        @Id
    
        @GeneratedValue(strategy = GenerationType.AUTO)
    
        var id: Int? = null
    
    
    

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

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

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

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

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

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

最后

都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。

技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;

我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 PDF(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

Java语言与原理;
大厂,小厂。Android面试先看你熟不熟悉Java语言

高级UI与自定义view;
自定义view,Android开发的基本功。

性能调优;
数据结构算法,设计模式。都是这里面的关键基础和重点需要熟练的。

NDK开发;
未来的方向,高薪必会。

前沿技术;
组件化,热升级,热修复,框架设计

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多

当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。

不出半年,你就能看出变化!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img
一个方向参考。

我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多

当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。

不出半年,你就能看出变化!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-bhptaTpZ-1712666256436)]

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐