精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我們一起聊聊如何手寫一個SpringBoot框架

開發 前端
在這篇文章中,我們將手寫模擬SpringBoot的核心流程,讓大家能夠以一種簡單的方式了解SpringBoot的大概工作原理。

你好,我是柳岸花開。

在這篇文章中,我們將手寫模擬SpringBoot的核心流程,讓大家能夠以一種簡單的方式了解SpringBoot的大概工作原理。

項目結構

我們創建一個工程,包含兩個模塊:

  1. springboot模塊,表示SpringBoot框架的源碼實現。
  2. user包,表示用戶業務系統,用來寫業務代碼來測試我們所模擬出來的SpringBoot。

首先,在springboot模塊中添加以下依賴:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.18</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.18</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.18</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-core</artifactId>
        <version>9.0.60</version>
    </dependency>
</dependencies>

在user模塊下,我們進行正常的開發,比如先添加SpringBoot依賴,然后定義相關的Controller和Service:

<dependencies>
    <dependency>
        <groupId>org.example</groupId>
        <artifactId>springboot</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

定義UserController和UserService

在user包下定義UserController和UserService,希望能通過運行MyApplication中的main方法,直接啟動項目,并能在瀏覽器中正常訪問到UserController中的某個方法。

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("test")
    public String test(){
        return userService.test();
    }
}

核心注解和核心類:

  • @SpringBootApplication:這個注解加在應用啟動類上,即main方法所在的類。
  • SpringApplication:這個類中有個run()方法,用來啟動SpringBoot應用。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Configuration
@ComponentScan
public @interface BobSpringBootApplication {
}

public class BobSpringApplication {

    public static void run(Class clazz){
        AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
        applicationContext.register(clazz);
        applicationContext.refresh();

        startTomcat(applicationContext);
    }

    private static void startTomcat(WebApplicationContext applicationContext) {
        Tomcat tomcat = new Tomcat();

Server server = tomcat.getServer();
Service service = server.findService("Tomcat");

Connector connector = new Connector();
connector.setPort(8081);

Engine engine = new StandardEngine();
engine.setDefaultHost("localhost");

Host host = new StandardHost();
host.setName("localhost");

String contextPath = "";
Context context = new StandardContext();
context.setPath(contextPath);
context.addLifecycleListener(new Tomcat.FixContextListener());

host.addChild(context);
engine.addChild(host);

service.setContainer(engine);
service.addConnector(connector);

        Tomcat.addServlet(context, "dispatcher", new DispatcherServlet(applicationContext));
        context.addServletMappingDecoded("/", "dispatcher");

        try {
            tomcat.start();
        } catch (LifecycleException e) {
            e.printStackTrace();
        }

        tomcat.getServer().await();
    }
}

@BobSpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        BobSpringApplication.run(MyApplication.class);
    }
}

實現Tomcat和Jetty的切換

如果項目中有Tomcat的依賴,那就啟動Tomcat;如果有Jetty的依賴就啟動Jetty;如果兩者都沒有則報錯;如果兩者都有也報錯。

public interface WebServer {
    void start();
}

public class TomcatWebServer implements WebServer {
    @Override
    public void start() {
        System.out.println("啟動Tomcat");
    }
}

public class JettyWebServer implements WebServer {
    @Override
    public void start() {
        System.out.println("啟動Jetty");
    }
}

模擬實現條件注解:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Conditional(BobOnClassCondition.class)
public @interface BobConditionalOnClass {
    String value() default "";
}

public class BobOnClassCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        Map<String, Object> annotationAttributes = metadata.getAnnotationAttributes(BobConditionalOnClass.class.getName());
        String className = (String) annotationAttributes.get("value");

        try {
            context.getClassLoader().loadClass(className);
            return true;
        } catch (ClassNotFoundException e) {
            return false;
        }
    }
}

模擬實現自動配置類:

@Configuration
public class WebServiceAutoConfiguration {
    @Bean
    @BobConditionalOnClass("org.apache.catalina.startup.Tomcat")
    public TomcatWebServer tomcatWebServer() {
        return new TomcatWebServer();
    }

    @Bean
    @BobConditionalOnClass("org.eclipse.jetty.server.Server")
    public JettyWebServer jettyWebServer() {
        return new JettyWebServer();
    }
}

在BobSpringApplication中添加獲取WebServer的方法:

public static WebServer getWebServer(ApplicationContext applicationContext) {
    Map<String, WebServer> webServers = applicationContext.getBeansOfType(WebServer.class);

    if (webServers.isEmpty()) {
        throw new NullPointerException();
    }
    if (webServers.size() > 1) {
        throw new IllegalStateException();
    }

    return webServers.values().stream().findFirst().get();
}

通過以上步驟,我們實現了一個簡單的SpringBoot,并且可以根據依賴切換Tomcat和Jetty。

責任編輯:武曉燕 來源: 柳岸花開
相關推薦

2024-06-17 11:59:39

2022-06-26 09:40:55

Django框架服務

2025-05-26 03:15:00

接口高可用框架

2025-02-28 08:46:24

框架微服務架構

2024-07-03 08:36:14

序列化算法設計模式

2024-02-20 21:34:16

循環GolangGo

2021-08-27 07:06:10

IOJava抽象

2023-06-30 08:18:51

敏捷開發模式

2022-05-24 08:21:16

數據安全API

2023-08-10 08:28:46

網絡編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2023-09-10 21:42:31

2024-09-09 00:00:00

編寫技術文檔

2023-04-03 00:09:13

2024-11-27 16:07:45

2024-09-30 09:33:31

2024-09-04 08:55:56

2021-10-14 11:08:17

大數據框架內存

2023-07-27 07:46:51

SAFe團隊測試

2023-12-28 09:55:08

隊列數據結構存儲
點贊
收藏

51CTO技術棧公眾號

欧美色999| 亚洲女人18毛片水真多| 久久伦理在线| 日韩欧美一二区| 97国产精东麻豆人妻电影| 国产女人在线观看| 国产一区二区成人久久免费影院| 欧美劲爆第一页| 欧美偷拍一区二区三区| 4438全国亚洲精品观看视频| 日韩欧美在线播放| 性做爰过程免费播放| 少妇喷水在线观看| 久久精品国产一区二区三| 久久久免费av| 亚洲第一页av| 永久免费精品视频| 欧美日韩一区 二区 三区 久久精品| 欧美国产综合在线| 日本免费中文字幕在线| 99国产精品久| 成人丝袜18视频在线观看| 欧美日韩成人在线一区| 欧美极品欧美精品欧美| 成人在线app| 久久久高清一区二区三区| 98国产高清一区| 中文字幕在线天堂| 黄色在线一区| 日韩在线观看视频免费| 粉嫩av免费一区二区三区| 日韩少妇高潮抽搐| 综合激情在线| 色午夜这里只有精品| 国产xxxxxxxxx| 久久九九精品视频| 欧美日韩国产一区| 成年人小视频网站| 国产精品yjizz视频网| 亚洲天堂网中文字| 亚洲精品国产精品国自产| 十八禁一区二区三区| 国产麻豆精品视频| 成人国产精品日本在线| 中文字幕乱码视频| 欧美亚洲在线| 91wwwcom在线观看| 国产亚洲小视频| 亚洲高清影视| 久久精品人人爽| 九一在线免费观看| 嫩草一区二区三区| 亚洲精品国产福利| 完美搭档在线观看| 黄色网一区二区| 亚洲的天堂在线中文字幕| 国产精品19p| 欧美日韩中出| 日韩女优毛片在线| 91成人在线观看喷潮蘑菇| 9999在线精品视频| 欧美一区二区性放荡片| 日韩在线一区视频| 成人av在线播放| 欧美v国产在线一区二区三区| 黄色片子免费看| 国模大尺度视频一区二区| 欧美男女性生活在线直播观看| 亚洲高清在线免费观看| 电影一区电影二区| 欧美群妇大交群中文字幕| 亚洲精品综合在线观看| 亚洲一区二区av| 91精品国产入口在线| 成年人看片网站| 激情小说亚洲图片| 亚洲欧美日韩成人| 国产精品美女高潮无套 | 国产伦精品一区二区三区高清| 成人高潮片免费视频| 成人福利视频网站| 欧美日韩视频在线一区二区观看视频| 韩国中文免费在线视频| 国产精品免费免费| 9色视频在线观看| 丰满诱人av在线播放| 福利精品视频在线| 99免费视频观看| 95精品视频| 亚洲国产天堂网精品网站| 在线观看福利片| 久久综合电影| 欧美激情按摩在线| 青青视频在线免费观看| 国产一区二区三区黄视频 | 国产精品一区二区婷婷| 亚洲欧美自拍偷拍| 欧美成人高潮一二区在线看| 日韩久久一区二区三区| 日韩欧美一级二级| www在线观看免费视频| 国产精品久久久乱弄| 91国产一区在线| 中文字幕永久免费视频| 成人亚洲一区二区一| 日韩妆和欧美的一区二区| www视频在线看| 一本久道中文字幕精品亚洲嫩| 亚洲午夜精品一区| 天堂俺去俺来也www久久婷婷| 精品激情国产视频| wwwwww国产| 国产在线视频精品一区| 欧美人与性禽动交精品| www.欧美日本韩国| 日本精品一区二区三区高清| 中国老熟女重囗味hdxx| av一区二区在线观看| 国内成人精品一区| 国产美女免费视频| 久久久不卡影院| 777777av| 日韩精品一区二区三区中文| 丝袜美腿精品国产二区| 日韩久久中文字幕| 国产91精品免费| 亚洲一区精彩视频| 欧美xx视频| 亚洲精品国产欧美| 青青草偷拍视频| 精品一区二区三区免费| 日本在线一区| gay欧美网站| 亚洲国产日韩欧美在线动漫| 外国一级黄色片| 久久er精品视频| 欧洲成人一区二区| 国产日韩电影| 日韩av影片在线观看| 久久国产一级片| 国产一区二区三区免费| 最近看过的日韩成人| 99九九久久| 在线播放日韩精品| 亚洲精品国产无码| 久久久久国产精品人| 一女被多男玩喷潮视频| 精品亚洲免a| 韩国v欧美v日本v亚洲| 国产99视频在线| 亚洲美女视频在线观看| 天天操夜夜操很很操| 亚洲精品a级片| 成人久久精品视频| caoporm免费视频在线| 在线不卡欧美精品一区二区三区| 最新日韩免费视频| 日本色综合中文字幕| 图片区小说区区亚洲五月| 丝袜美腿一区| 在线视频欧美性高潮| 最近中文字幕在线观看| 国产精品福利一区二区三区| 日韩欧美国产片| 小说区亚洲自拍另类图片专区| 成人性生交大片免费看小说| av片在线观看网站| 亚洲精品一线二线三线| 久久久午夜影院| 久久久久久久电影| 污污网站免费观看| 中文在线播放一区二区| 国产伦精品一区二区三| 成人免费看视频网站| 一区二区三区国产在线观看| 一区二区三区黄| 一区二区三区四区亚洲| 中文字幕在线播放一区| 久久久水蜜桃av免费网站| 日韩av大全| 国产欧美88| 91av在线免费观看| 啊v视频在线| 日韩欧美激情一区| 亚洲熟妇无码乱子av电影| 国产精品私房写真福利视频| xxxx在线免费观看| 国内自拍一区| 日韩黄色影视| 日韩在线亚洲| 欧美一区二区影院| 免费日本一区二区三区视频| 欧美成人精精品一区二区频| 欧美亚洲精品天堂| 中文字幕一区二区三区四区不卡| 成人欧美精品一区二区| 成人福利免费在线观看| 91精品国产高清自在线看超| 91精品国产综合久久久久久豆腐| 91精品国产全国免费观看| 香蕉视频一区二区| 国产精品美女一区二区三区| 91亚洲一线产区二线产区| 日韩精品色哟哟| 欧美亚洲黄色片| 欧美色图国产精品| 国产精品一区二区三区免费 | 成人女保姆的销魂服务| av3级在线| 日日噜噜噜夜夜爽亚洲精品| 午夜视频福利在线观看| 51精品视频一区二区三区| 97人人澡人人爽人人模亚洲| 国产精品国产三级国产aⅴ中文| jjzzjjzz欧美69巨大| 另类人妖一区二区av| 欧美不卡在线播放| 中文字幕日韩欧美精品高清在线| 欧美一区观看| 国产调教精品| 亚洲综合在线小说| 国产激情久久| 欧美怡红院视频一区二区三区| av片在线观看网站| 成人av在线播放网站| 久久久久久久久国产精品| 日本综合在线| 亚洲香蕉成人av网站在线观看| 人妻一区二区三区四区| 欧美一区二区视频在线观看| 瑟瑟视频在线免费观看| 日韩欧中文字幕| 日韩av片在线播放| 亚洲精品国产精华液| 来吧亚洲综合网| 中文乱码免费一区二区| 国产aⅴ激情无码久久久无码| 成人av一区二区三区| 手机看片国产精品| 久久99国产精品尤物| 簧片在线免费看| 久久九九99| 日韩欧美xxxx| 久久一区亚洲| 一本大道熟女人妻中文字幕在线 | 日韩在线观看免费av| 国产www.大片在线| 亚洲一级一级97网| av电影在线观看| 中国日韩欧美久久久久久久久| 黄色av网址在线免费观看| 亚洲精品视频久久| 黄色美女网站在线观看| 国产一区二区三区在线免费观看| 欧美新色视频| 亚洲性猛交xxxxwww| 成人p站proumb入口| 尤物yw午夜国产精品视频明星| yw193.com尤物在线| 中日韩美女免费视频网址在线观看| 国产1区2区3区在线| 国产一区二区三区三区在线观看| 992tv免费直播在线观看| 色噜噜国产精品视频一区二区| 亚洲乱亚洲乱妇| 国产精品久久久久一区二区三区厕所| 亚洲一区久久久| **爰片久久毛片| 久久66热这里只有精品| 精品一区免费| 亚洲精品中文综合第一页| 98精品视频| 亚洲理论电影在线观看| 国产精品久久久久久久免费软件| 国产视频一区二区三区在线播放 | 日韩高清第一页| 国产一区二区三区视频在线播放| 极品人妻一区二区| 99久久伊人网影院| 一级特黄曰皮片视频| 亚洲欧美偷拍卡通变态| 国产午夜视频在线播放| 欧美日韩亚洲高清| 日批视频免费观看| 欧美一级xxx| 三区在线视频| 久久九九国产精品怡红院 | 毛片毛片毛片毛片毛| 99这里只有久久精品视频| 最新中文字幕av| 亚洲嫩草精品久久| 成人午夜视频在线播放| 欧美精品精品一区| 日韩中文字幕影院| 一个色综合导航| 黑人极品ⅴideos精品欧美棵| 日韩av理论片| 亚洲天堂av资源在线观看| 欧美视频观看一区| 综合天堂av久久久久久久| 日本精品一区二区三区四区| 韩国女主播成人在线观看| 7788色淫网站小说| 亚洲少妇30p| 午夜婷婷在线观看| 欧美成人综合网站| 超碰在线国产| 97久久精品国产| 久久gogo国模啪啪裸体| 日本在线观看一区二区| 欧美黄色大片网站| 亚洲激情在线观看视频| 不卡av在线网| 男人的天堂久久久| 精品视频在线看| 男人天堂资源在线| 日韩精品一区二区久久| 天堂…中文在线最新版在线| 精品在线观看视频| av中文字幕免费观看| 亚洲一区二区综合| 亚洲一区二区三区无码久久| 国产精品免费免费| 午夜精品一区二| 亚洲精品视频网上网址在线观看| 欧洲性视频在线播放| 91夜夜揉人人捏人人添红杏| 欧美精品一区二区久久| av黄色在线网站| aaa亚洲精品一二三区| 久青草免费视频| 欧美另类z0zxhd电影| 美丽的姑娘在线观看免费动漫| 午夜精品福利在线观看| 色妞ww精品视频7777| ijzzijzzij亚洲大全| 美女任你摸久久| 正在播放国产对白害羞| 日韩欧美在线中文字幕| 天堂在线中文字幕| 97激碰免费视频| 欧美人成在线观看ccc36| 精选一区二区三区四区五区| 欧美精品播放| 中文字幕在线观看视频www| 亚洲欧美日韩国产另类专区| 亚洲一区二区激情| 最新国产精品亚洲| 亚洲精品555| 成人免费在线视频网站| 91成人精品视频| 女王人厕视频2ⅴk| 一区二区三区在线免费| 性中国xxx极品hd| 欧美激情视频在线观看| julia中文字幕一区二区99在线| 91社在线播放| 国产精品综合一区二区三区| 国产高潮国产高潮久久久91| 欧美变态口味重另类| 超碰中文在线| 国精产品99永久一区一区| 99精品国产99久久久久久福利| 黄色在线观看av| 精品国产一区二区三区性色av| 91高清视频免费| 少妇精品久久久一区二区| 男操女免费网站| 亚洲欧洲99久久| 亚洲国产日韩在线观看| 高清欧美电影在线| 免费成人网www| 在线不卡一区二区三区| 樱桃国产成人精品视频| 手机看片福利永久| 国产精品成人免费电影| 99久久婷婷| 久久久久99人妻一区二区三区| 亚洲福利视频一区二区| 欧美日韩国产中文字幕在线| 国产精品免费在线免费| 亚洲最新色图| 一区二区免费在线观看视频| 色综合久久中文字幕| 在线播放毛片| 国产精品18毛片一区二区| 午夜一区在线| 四虎影视一区二区| 欧美mv日韩mv亚洲| 男人最爱成人网| 秋霞在线一区二区| av资源站一区| 中文字幕一区二区在线视频 | 一级片久久久久| 欧美一区二区三区爱爱| 波多野结衣视频一区二区| 日本午夜精品一区二区| 国产精品亚洲第一区在线暖暖韩国| 日韩 欧美 中文| 爱福利视频一区|