当前位置: 首页 > news >正文

做网站项目的意义ppt介绍站群seo技巧

做网站项目的意义ppt介绍,站群seo技巧,网站怎样做能排名靠前,无锡企业网站建设你好,我是柳岸花开。 在这篇文章中,我们将手写模拟SpringBoot的核心流程,让大家能够以一种简单的方式了解SpringBoot的大概工作原理。 项目结构 我们创建一个工程,包含两个模块: springboot模块,表示Spring…

你好,我是柳岸花开。

在这篇文章中,我们将手写模拟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依赖,然后定义相关的ControllerService

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

定义UserController和UserService

user包下定义UserControllerUserService,希望能通过运行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。

👇关注我,下期了解👇 ​ SpringBoot自动配置 ​ ​ alt ​ ​ 回复 222,获取Java面试题合集 ​ 关于我 ​ 一枚爱折腾的Java程序猿,专注Spring干货。把路上的问题记录下来,帮助那些和我一样的人。 ​ 好奇心强,喜欢并深入研究古天文。 ​ 崇尚 个人系统创建,做一些时间越长越有价值的事情。思考 把时间留下来 又 每刻都是新的。

本文由 mdnice 多平台发布

http://www.hrbkazy.com/news/23077.html

相关文章:

  • wordpress和ecshop整合西安网站seo
  • 如何给网站做流量动态网站设计
  • 有专门做消除网站上对公司不利的seo刷网站
  • 免费网站建设官网seo与sem的区别与联系
  • 怎样做美瞳网站跨境电商seo
  • 前端和做网站怎么制作网页
  • sem推广培训seo排名优化公司
  • wordpress网站建设教程视频b站推广网站mmm
  • 怎么做公众号网站吗交换链接营销的典型案例
  • 建设一个网站的步骤有哪些企业网站运营推广
  • 大连企业网站模板做网站比较好的公司有哪些
  • 开发施工建设网站审核自己建网站流程
  • 网站规划和布局百度搜索数据查询
  • 旅游网站开发设计文档网站seo怎么做
  • 健康证图片在线制作做优化关键词
  • 重庆璧山网站制作公司推荐百度推广客服电话多少
  • 网站站内推广网站免费推广网站
  • 免费制作微信小程序的网站站长工具网
  • 郑州网站建设企业名录百度联系方式
  • jsp新闻网站开发代码怎样宣传网站
  • 长沙岳麓区疫情最新情况网站百度关键词seo排名优化
  • 成都建设银行合作装修网站升华网络推广软件
  • 广安市建设局官方网站北京seo公司有哪些
  • 怎么申请免费国内免费网站百中搜
  • 手机网站推广法广东东莞最新疫情
  • 一般网站建设大概需要多少钱品牌seo是什么意思
  • 宁波住房和城乡建设局网站公司网站建设代理
  • java可以做网站后台seo推广薪资
  • 北京it外包公司德兴网站seo
  • 网站开发设置用户外贸谷歌优化