成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

SpringBoot 入門簡(jiǎn)介

chuyao / 2197人閱讀

摘要:這里使用的是數(shù)據(jù)庫啟動(dòng)類上加上注解在啟動(dòng)類中添加對(duì)包掃描掃描多個(gè)包下的可以有以下幾種方法掃描會(huì)自動(dòng)加載相關(guān)配置,數(shù)據(jù)源就會(huì)自動(dòng)注入到中,會(huì)自動(dòng)注入到中,可以直接使用。有配置文件下的使用掃描多個(gè)包下的可以有以下幾種方法掃描

Spring-Boot 學(xué)習(xí)筆記 1 Spring-Boot 介紹 1.1 什么是Spring-Boot

Spring-Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過程。個(gè)人理解來說Spring-Boot其實(shí)不是什么新的框架,它默認(rèn)配置了很多框架的使用方式,就像maven整合了所有的jar包,Spring-Boot整合了其他相關(guān)聯(lián)框架。

Spring-Boot 基于Spring框架,而Spring-Cloud基于Spring-Boot,為微服務(wù)體系開發(fā)中的架構(gòu)問題,提供了一整套的解決方案——服務(wù)注冊(cè)與發(fā)現(xiàn),服務(wù)消費(fèi),服務(wù)保護(hù)與熔斷,網(wǎng)關(guān),分布式調(diào)用追蹤,分布式配置管理等。

Spring-Boot 四大特性:自動(dòng)配置、起步依賴、Actuator、命令行界面(CLI)

1.2 為什么要使用Spring-Boot

區(qū)別于Spring-Boot以前的Spring和其他框架的整合例如Mybatis,Shiro等都需要配置文件,項(xiàng)目中的配置文件越來越多,也越來越繁瑣。項(xiàng)目中常常因?yàn)榕渲梦募鲥e(cuò)的原因,導(dǎo)致項(xiàng)目運(yùn)行出錯(cuò)。

而Spring-Boot可以說就是為了解決繁雜配置而出現(xiàn)的解決方案。Spring-Boot理念可以理解為:約定大于配置??焖僬系谌娇蚣埽瑴p少甚至不需要配置文件,解決了以往的Spring框架下的弊端。

因?yàn)榕渲梦募倭?,代碼變少了,第三方框架帶來的煩惱變少了,對(duì)于一個(gè)開發(fā)團(tuán)隊(duì)來說,更加利于開發(fā),后期維護(hù)也更加簡(jiǎn)單。

要使用Spring-Cloud前應(yīng)該掌握Spring-Boot

1.2.1 Spring-Boot 自動(dòng)配置

傳統(tǒng)的Spring web項(xiàng)目配置需要經(jīng)過以下步驟:

1)配置web.xml,加載Spring和Spring MVC

2)配置數(shù)據(jù)庫連接、配置Spring事務(wù)

3)配置加載配置文件的讀取,開啟注解

4)配置日志文件

配置完成之后部署tomcat 調(diào)試

但是針對(duì)一些單一業(yè)務(wù)需求的項(xiàng)目,例如該項(xiàng)目只是實(shí)現(xiàn)一個(gè)郵件收發(fā),表格導(dǎo)出等單一功能,配置步驟便顯得麻煩。

Spring-Boot的自動(dòng)配置則能夠簡(jiǎn)化很多配置,減少傳統(tǒng)開發(fā)步驟,直接開展項(xiàng)目。

1.2.2 Spring-Boot 起步依賴

Spring-Boot啟動(dòng)時(shí)回去導(dǎo)入spring-boot-autoconfigure包下META-INF/spring.factories配置文件

根據(jù)XxxxAutoConfiguration配置類的條件注解@Conditional判斷當(dāng)前環(huán)境中是否滿足XxxxAutoConfiguration的注解條件,如果滿足,則自動(dòng)向Spring IOC 容器中注入bean

1.2.3 Spring-Boot Actuator

Spring-Boot為了改善傳統(tǒng)Spring應(yīng)用繁雜的配置內(nèi)容,采用了包掃描和自動(dòng)化配置的機(jī)制,加載了原來在xml文件中的內(nèi)容。自動(dòng)配置有利有弊,有利的地方是讓代碼看上去更加簡(jiǎn)潔,反面則造成了分析應(yīng)用中資源和實(shí)例的各種關(guān)系變得困難(實(shí)例創(chuàng)建和依賴關(guān)系等信息都被離散到了各個(gè)配置類的注解上)

  應(yīng)用配置類:獲取應(yīng)用程序中加載的應(yīng)用配置、環(huán)境變量、自動(dòng)化配置報(bào)告等與Spring-Boot應(yīng)用密切相關(guān)的配置類信息。
  
  度量指標(biāo)類:獲取應(yīng)用程序運(yùn)行過程中用于監(jiān)控的度量指標(biāo),比如:內(nèi)存信息、線程池信息、HTTP請(qǐng)求統(tǒng)計(jì)等。
  
  操作控制類:提供了對(duì)應(yīng)用的關(guān)閉等操作類功能。

Actuator這類端點(diǎn)的出現(xiàn)意義就是為了幫助我們輕松的獲取一系列關(guān)于Spring 應(yīng)用配置內(nèi)容的詳細(xì)報(bào)告,比如:自動(dòng)化配置的報(bào)告、Bean創(chuàng)建的報(bào)告、環(huán)境屬性的報(bào)告等。

Actuator提供了以下監(jiān)控方式

Actuator 提供了 13 個(gè)接口,具體如下表所示

通過在配置文件中加入 management.security.enabled=false

例如:

1.2.4 Spring-Boot CLI

Spring-Boot CLI是一個(gè)命令行工具,可用于快速搭建基于Spring的原型。它支持運(yùn)行Groovy腳本,這也就意味著你可以使用類似Java的語法,但不用寫很多的模板代碼。

首先下載Spring-Boot CLI

https://docs.spring.io/spring...

配置環(huán)境變量

在PATH 中配置Spring-Boot CLI文件夾下bin的路徑:
D:spring-boot-cli-1.5.9.RELEASE-binspring-1.5.9.RELEASEbin

打開CMD查看是否安裝成功

輸入 spring --version (注意是--)

使用命令初始化項(xiàng)目

spring init --build=maven --java-version=1.8 --dependencies=web --packaging=jar --boot-version=1.5.9.RELEASE --groupId=com.example.demo --artifactId=javen

--build:表示項(xiàng)目構(gòu)建工具maven,也可以選擇gradle
--java-version:表示JDK版本
--dependencies=web:表示依賴web插件
--packaging:表示打包程序方式
--boot-version:選擇 spring boot的版本
--groupId:maven的groupId
--artifactId:maven的artifactId

將生成的javan.zip導(dǎo)入eclipse(STS)中即可

1.3 更簡(jiǎn)潔的報(bào)錯(cuò)信息


Spring-Boot相比于以前的控制臺(tái)報(bào)錯(cuò)信息,更加人性化和簡(jiǎn)潔。

2 Spring-Boot 環(huán)境要求

默認(rèn)情況下,Spring-Boot 1.3.0 Build-snapshot 需要Java 7 以及Spring框架 4.1.3或以上,如果在Java 6下使用Spring-Boot,需要添加額外的配置。

雖然可以在Java 6 和 java 7下使用Spring-Boot,但是官方建議在Java 8下使用Spring-Boot

構(gòu)建環(huán)境明確支持有Maven(3.2+)和Gradle(1.12+)。

2.1 Spring-Boot 內(nèi)嵌servlet 容器

Spring-Boot內(nèi)嵌容器支持開箱即用(out of the box)

也可以使用Spring-Boot應(yīng)用部署到任何兼容Servlet 3.0+的容器。

3 創(chuàng)建 Spring-Boot 項(xiàng)目 3.1 三種創(chuàng)建Spring-Boot項(xiàng)目的方式:

1) 在Spring官網(wǎng) http://start.spring.io/

進(jìn)行項(xiàng)目名稱等設(shè)置并選擇版本、依賴。然后會(huì)下載這個(gè)項(xiàng)目的壓縮文件,解壓后,使用 eclipse,Import -> Existing Maven Projects -> Next ->選擇解壓后的文件夾-> Finsh 成功導(dǎo)入該項(xiàng)目

2) 使用Spring-Boot 插件,在eclipse中new一個(gè) Spring starter project,并選擇需要的依賴。(第一次構(gòu)建會(huì)很慢)

3) 用maven構(gòu)建項(xiàng)目

上面 1)、2)的構(gòu)建方式中生成的pom.xml文件中默認(rèn)有兩個(gè)模塊:

spring-boot-starter :核心模塊,包括自動(dòng)配置支持、日志和yml;


        org.springframework.boot
        spring-boot-starter-parent
        1.5.9.RELEASE
         

spring-boot-starter-test :測(cè)試模塊,包括JUnit、Hamcrest、Mockito。


        org.springframework.boot
        spring-boot-starter-test
        test
3.2 Spring-Boot熱部署:

只用在pom.xml里面依賴devtools即可


      org.springframework.boot
      spring-boot-devtools
      true
3.2.1 Spring-Boot熱部署重新編譯類文件

熱部署指的是:當(dāng)我們修改了一個(gè)java類的時(shí)候,我們只需要重新編譯一下,Spring-Boot的就會(huì)重啟了。因?yàn)閐evtools會(huì)監(jiān)聽classpath下的文件變動(dòng),所以當(dāng)java類重新編譯的時(shí)候,devtools會(huì)監(jiān)聽到這個(gè)變化,然后就會(huì)重新啟動(dòng)Spring-Boot。這個(gè)重啟是非??斓囊粋€(gè)過程。因?yàn)樵赟pring-Boot中有兩個(gè)類加載器,一個(gè)是加載工程外部資源的,如jar包,還有一個(gè)類加載器是用來加載本工程的class的。所以在重啟Spring-Boot的時(shí)候只加載本工程的class文件。

3.2.2 Spring-Boot熱部署監(jiān)聽文件夾的變化

如果你不想重新編譯java類的話,還有一種方式用來讓Spring-Boot重啟,那就是讓devtools監(jiān)聽文件夾的變化:比如我們想讓com.example.springboot這個(gè)文件夾下的文件改變的時(shí)候,重新啟動(dòng)Spring-Boot,那么我們只要在application.properties中添加這樣一句話就行了:spring.devtools.restart.additional-paths=comexamplespringboot

3.2.3 Spring-Boot熱部署頁面熱部署

devtools可以實(shí)現(xiàn)頁面熱部署,即頁面修改后會(huì)立即生效。你可以在application.properties文件中配置spring.thymeleaf.cache=false來實(shí)現(xiàn)這個(gè)功能。

3.3 Spring-Boot Maven插件: 3.3.1 Spring-Boot maven插件作用:

Spring-Boot的Maven插件(spring-boot-maven-plugin)能夠以Maven的方式為應(yīng)用提供Spring-Boot的支持,即為Spring-Boot應(yīng)用提供了執(zhí)行Maven操作的可能。

spring-boot-maven-plugin能夠?qū)pring-Boot應(yīng)用打包為可執(zhí)行的jar或war文件,然后以通常的方式運(yùn)行Spring Boot應(yīng)用。


    
        
            org.springframework.boot
            spring-boot-maven-plugin
            
              true
            
        
    
3.3.2 Spring-Boot Maven plugin的5個(gè)Goals:

spring-boot: repackage,默認(rèn)goal。在mvn package之后,再次打包可執(zhí)行的jar/war,同時(shí)保留mvn package生成的jar/war為.origin

spring-boot: run,運(yùn)行Spring-Boot應(yīng)用

spring-boot: start,在mvn integration-test階段,進(jìn)行Spring-Boot應(yīng)用生命周期的管理

spring-boot: stop,在mvn integration-test階段,進(jìn)行Spring-Boot應(yīng)用生命周期的管理

spring-boot: build-info,生成Actuator使用的構(gòu)建信息文件build-info.properties

3.4 application.properties和application.yml

yml: Spring-Boot會(huì)加載的配置文件(和properties功能一致,只是文件編輯的格式不同)
除此之外: application.properties 配置中文值的時(shí)候,讀取出來的屬性值會(huì)出現(xiàn)亂碼問題。但是 application.yml 不會(huì)出現(xiàn)亂碼問題。原因是,Spring-Boot 是以 iso-8859 的編碼方式讀取 application.properties 配置文件。
以下是 .properties和 .yml格式對(duì)比

3.4.1 application.properties :

Spring-Data JPA數(shù)據(jù)源配置

spring.datasource.url=jdbc:mysql://localhost:3306/yourDB
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true

spring.thymeleaf.cache=false
3.4.2 application.yml :

Spring-Data JPA數(shù)據(jù)源配置

spring:
    datasource:
        url: jdbc:mysql://localhost:3306/yourDB
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver
    jpa:
        properties.hibernate.hbm2ddl.auto: update
        properties.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect
        
        show-sql: true
    thymeleaf:
        cache: false

yml的格式特點(diǎn):縮進(jìn)式,"="號(hào)使用":"替代,":"之后要使用空格。
yml比properties更能清晰體現(xiàn)結(jié)構(gòu)以及內(nèi)容,類似eclipse里面的包路徑展示方式

3.5 Spring-Boot Application.class

Spring-Boot由于內(nèi)嵌入了Tomcat,在jar項(xiàng)目下,直接開啟Application.class就能直接加載配置并開啟Tomcat。

@PropertySource 掃描指定路徑下的properties

@SpringBootApplication
@PropertySource("classpath:prop/application.properties")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
3.6 jasypt-Spring-Boot 配置文件加密

在配置文件.properties或.yml中,數(shù)據(jù)庫連接的賬號(hào)密碼不應(yīng)該直接暴露。而Spring-Boot與jasypt的整合包可以對(duì)我們的配置文件的賬號(hào)密碼進(jìn)行加密。

@EnableEncryptableProperties
@RunWith(SpringRunner.class)
@SpringBootTest(classes=Deserializers.Base.class)
//@SpringBootTest
public class JaysptTest {
    @Autowired
    private StringEncryptor stringEncryptor;//密碼解碼器注入

    @Test
    public void test() {
        System.out.println("生成加密后的數(shù)據(jù)庫用戶名:"+stringEncryptor.encrypt("root"));
        System.out.println("生成加密后的數(shù)據(jù)庫密碼:"+stringEncryptor.encrypt("root"));    
    }
}

得到加密后的信息:

生成加密后的數(shù)據(jù)庫用戶名:5KtXuBsNjeQtOuUOR8PPMg==
生成加密后的數(shù)據(jù)庫密碼:Y/SEuMVPbIqgimIKqnxFrg==

在配置文件中修改:

jasypt.encryptor.password:可以理解為加鹽

默認(rèn)情況下jasypt采用的算法是PBEWithMD5AndDES,該算法對(duì)同一串明文每次加密的密文都不一樣,比較適合做數(shù)據(jù)加解密。但是該算法必須配置密碼,我們?cè)趛ml文件配置如下參數(shù)

jasypt:
  encryptor:
    password: 123456

加密后的字符串需要放進(jìn)ENC()里面

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/sbjpa?useUnicode=true&characterEncoding=UTF-8
    username: ENC(5KtXuBsNjeQtOuUOR8PPMg==)
    password: ENC(Y/SEuMVPbIqgimIKqnxFrg==)
    driver-class-name: com.mysql.jdbc.Driver
4 使用Spring-Boot Web項(xiàng)目綜合開發(fā) 4.1 Spring-Boot 在Controller下的特別注解

@RestController 的意思就是controller里面的方法都以json格式輸出,不用再進(jìn)行jackjson、fastjson的配置。

@RestController
public class UsersController {

    @RequestMapping("/users")
    public Map getUsers() {
        Map map = new HashMap<>();
        Users users = new Users();
        users.setUid(001);
        users.setUserName("administrator");
        users.setUserSex("simpleBoy");
        users.setUserAge(16);
        map.put("users", users);
        return map;
    }
}

輸出結(jié)果為json對(duì)象:

4.2 Spring-Boot下使用Mybatis

相比以往復(fù)雜的配置,Spring-Boot的配置相當(dāng)簡(jiǎn)單:

添加相關(guān)依賴


        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        1.3.1
4.2.1 無配置文件版使用Mybatis

只用添加相關(guān)依賴和application.yml并配合注解即可

相關(guān)的主要依賴(web、mybatis-spring-boot、mysql-connector)


    
        org.springframework.boot
        spring-boot-starter
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    
        
        
    
        org.springframework.boot
        spring-boot-starter-web
    
        
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
    
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        1.3.1
    
    
        
            org.springframework.boot
            spring-boot-starter-actuator
        
    <-- 這里使用的是MySQL數(shù)據(jù)庫--!>
    
        mysql
        mysql-connector-java
    
    
        org.springframework.boot
        spring-boot-devtools
        true
    

application.yml

mybatis:
    type-aliases-package: com.example.demo.po
    
spring:
    datasource: 
      url: jdbc:mysql://localhost:3306/sbjpa
      username: root
      password: root
      driverClassName: com.mysql.jdbc.Driver

Application.java啟動(dòng)類上加上注解

在啟動(dòng)類中添加對(duì)mapper包掃描@MapperScan

@MapperScan("com.example.*.dao")掃描多個(gè)包下的mapper,可以有以下幾種方法掃描

1. @MapperScan("com.example.*.dao")
2. @MapperScan("com.example.test1.dao,com.example.test2.dao")
@SpringBootApplication
@MapperScan("com.example.*.dao")
public class SpringBootMybatisApplication {

    public static void main(String[] args) {
          SpringApplication.run(SpringBootMybatisApplication.class, args);
    }
}

Spring-Boot會(huì)自動(dòng)加載spring.datasource.*相關(guān)配置,數(shù)據(jù)源就會(huì)自動(dòng)注入到sqlSessionFactory中,sqlSessionFactory會(huì)自動(dòng)注入到Mapper中,可以直接使用。要么在其他Mapper類上加@Mapper注解,前者更加方便。

public interface UsersMapper {

    @Select("select * from users")
    @Results({ @Result(property = "userName", column = "user_name"), @Result(property = "userSex", column = "user_sex"),
            @Result(property = "userAge", column = "user_age") })
    public List getAll();

    @Insert("insert into users(user_name,user_sex,user_age) values(#{usersName},#{userSex},#{userAge})")
    public void insert(Users users);

    @Update("update users set user_name=#{usersName},user_sex=#{userSex},user_age=#{userAge}")
    public void update(Users users);

    @Delete("delete from users where uid=#{uid}")
    public void delete(Integer uid);
}
4.2.2 有配置文件XML下的Mybatis使用

@MapperScan("com.example.*.dao")掃描多個(gè)包下的mapper,可以有以下幾種方法掃描

1. @MapperScan("com.example.*.dao")
2. @MapperScan("com.example.test1.dao,com.example.test2.dao")
@SpringBootApplication
@MapperScan("com.example.*.dao")
public class SpringBootMybatisApplication {

    public static void main(String[] args) {
          SpringApplication.run(SpringBootMybatisApplication.class, args);
    }
}

1.application.properties

mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package=com.example.*.po

spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/sbmybatis?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = 

2.UserMapper.xml





    
        
        
        
        
        
    

    
        id, userName, passWord, user_sex, nick_name
    

    
        
            and userName = #{userName}
        
        
            and user_sex = #{userSex}
        
    

    
    
    

    

    

    
        INSERT INTO
        users
        (userName,passWord,user_sex)
        VALUES
        (#{userName}, #{passWord}, #{userSex})
    

    
        UPDATE
        users
        SET
        userName = #{userName},
        passWord = #{passWord},
        nick_name = #{nickName}
        WHERE
        id = #{id}
    

    
        DELETE FROM
        users
        WHERE
        id =#{id}
    

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77322.html

相關(guān)文章

  • 強(qiáng)推!大牛程序員必備的Java日志框架,性能無敵

    摘要:本文要來分享給大家程序員最常用的日志框架組件。沒有基礎(chǔ)的同學(xué)也不要著急,這套教程覆蓋了目前所有的日志框架,只要你學(xué),就一定用得到,先收藏,以備不時(shí)之需。 作為一名Java程序員,我們開發(fā)了很多Java應(yīng)用程序,包括桌面應(yīng)用、WEB應(yīng)用以及移動(dòng)應(yīng)用。然而日志系統(tǒng)是一個(gè)成熟Java應(yīng)用所必不可少的。在開發(fā)和調(diào)試階段,日志可以幫...

    zebrayoung 評(píng)論0 收藏0
  • SpringBoot基礎(chǔ)入門

    摘要:基礎(chǔ)入門篇簡(jiǎn)介可以基于輕松創(chuàng)建可以運(yùn)行的獨(dú)立的生產(chǎn)級(jí)的應(yīng)用程序。對(duì)平臺(tái)和第三方類庫我們有自己看法和意見約定大于配置。官網(wǎng)目前最新版本是我們接下來就在這個(gè)版本的基礎(chǔ)上面進(jìn)行學(xué)習(xí)。變成項(xiàng)目引入依賴。 SpringBoot基礎(chǔ)入門篇 簡(jiǎn)介 Spring Boot可以基于Spring輕松創(chuàng)建可以運(yùn)行的、獨(dú)立的、生產(chǎn)級(jí)的應(yīng)用程序。 對(duì)Spring平臺(tái)和第三方類庫我們有自己看法和意見(約定大于配置...

    Edison 評(píng)論0 收藏0
  • Spring Boot整合hessian入門

    摘要:相比,更簡(jiǎn)單快捷。采用的是二進(jìn)制協(xié)議,因?yàn)椴捎玫氖嵌M(jìn)制協(xié)議,所以它很適合于發(fā)送二進(jìn)制數(shù)據(jù)。創(chuàng)建接口創(chuàng)建實(shí)現(xiàn)類類端在這個(gè)包下服務(wù)端包類將服務(wù)端的代碼打包安裝到本地倉庫,打開瀏覽器輸入即可。 前言 看了其他的文章發(fā)現(xiàn),大多數(shù)都是只寫了關(guān)鍵的部分,對(duì)于一個(gè)初學(xué)者來說只能明白用了什么東西,但實(shí)際動(dòng)手發(fā)現(xiàn),項(xiàng)目還存在一些問題,通過本篇文章,可以避免一些問題,節(jié)省一些時(shí)間成本。 Hessian簡(jiǎn)...

    wujl596 評(píng)論0 收藏0
  • Java學(xué)習(xí)路線總結(jié),搬磚工逆襲Java架構(gòu)師(全網(wǎng)最強(qiáng))

    摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡(jiǎn)介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號(hào)作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡(jiǎn)而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...

    Scorpion 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<