zoukankan      html  css  js  c++  java
  • SpringBoot系列之入门篇(一)

    前言

    前面我们学习了Java基础和算法,接下来我们通过学习SpringBoot基础来强化代码书写能力,只有通过基础项目实践才能发现问题,在此过程中我们则可以进一步学习JVM虚拟机和线程知识,岂不两全其美,好了,话不多讲,我们开始。

    SpringBoot入门

    在还未接触SpringBoot时,自我感觉是一个全新的框架,可能需要花费很多时间去学习,但当我了解完基础原理后,发现并不是全新学习,一切通过注解来进行配置从而实现IOC,相对.NET Core而言不过是在表达方式上使用不同罢了,可以理解为换汤不换药。Spring Boot由Pivotal Team开发基于Java的开源框架,可用于创建微服务,它为Java开发者提供了一个很好的平台,用于开发可以独立运行的生产级Spring应用程序,通过最低配置,而无需整个Spring配置设置。SpringBoot设计目标:【避免复杂的XML配置】、【减少开发时间并独立运行应用程序】、【灵活配置Java Bean、XML配置和数据库事务】、【强大批处理功能并管理REST端点】、【简化依赖管理】、【提供嵌入式Servlet容器】、【所有内容自动配置而无需手动配置】。SpringBoot的工作原理:通过使用@EnableAutoConfiguration注解,根据添加到项目中的依赖项自动配置应用程序。例如,如果MySQL数据库位于类路径上,但尚未配置任何数据库连接,则Spring Boot会自动配置内存数据库。Spring Boot应用程序的入口点是包含@SpringBootApplication和main方法的类,Spring Boot使用@ComponentScan注解自动扫描项目中包含的所有组件。通过idea初始化SpringBoot后,如下:

    我们知道在.NET Core中已定义控制器、而路由则可以灵活定义,在SpringBoot中一切都通过注解进行,接下来我们来启动SpringBoot应用程序并打印出hello world,如下:

    package com.demo.springboot;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @SpringBootApplication
    @Controller
    public class SpringbootApplication {
    
        @RequestMapping
        @ResponseBody
        public  String sayHello(){
            return  "hello world";
        }
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootApplication.class, args);
        }
    }

    上述我们只是简单打印了hello world,后续结合数据库进行增删改查时再来详细讲解上述注解,我们首先熟悉其他基础注解概念,我们通过如下一个例子来说明:模拟数据库查询获取用户列表,首先我们定义用户类,如下:

    package com.demo.springboot;
    
    public class User {
        public int age;
        public String name;
    
        public User(int age, String name) {
            this.age = age;
            this.name = name;
        }
    }

    接下来我们模拟数据库,如下获取用户列表:

    package com.demo.springboot;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class UserDAL {
    
        public List<User> getUsers() {
            List<User> users = new ArrayList<>();
            for (int i = 18; i < 30; i++) {
                users.add(new User(i, "jeffcky" + Integer.toString(i)));
            }
            return users;
        }
    }

    我们定义一个配置类来获取上述UserDAL,如下:

    package com.demo.springboot;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @ComponentScan(basePackages = "com.demo.springboot")
    public class SpringConfig {
        @Bean
        public UserDAL getUserDAL() {
            return new UserDAL();
        }
    }

    @Configuration和@ComponentScan注解

    在SpringBoot 1.x时通过XML来代替注解进行配置,但是随着项目扩大,通过XML配置所带来的的问题显而易见,随着JDK 1.5发布开始支持注解,所以在SpringBoot也通过注解替代了繁琐的XML配置,我们通过使用注解@Configuration意在表明这相当于一个XML文件,那么注解@ComponentScan又是什么意思呢?因为在Spring应用程序启动时,需要扫描包中所有类使其成为Bean(下面会讲),但是我们需要告诉到底在哪里搜索这些类呢?这个时候就需要使用注解@ComponentScan。在Spring中,我们通过@ComponentScan结合注解@Configuration来指定需要查找的包,若没有指定参数,则默认查找当前包以及当前包下所有子包,参数basePackages有别名value且为数组即可同时指定多个包。所以上述可去除参数,直接用注解@ComponentScan即可,同时该注解也支持过滤类型,这个我们留到后续再进行详细讲解。

    @Bean注解

    在Spring应用程序中,由Spring IoC容器管理的对象称为bean,也就是说Bean是由Spring IoC容器进行实例化,组装和以其他方式管理的对象,说白了就是进行依赖注入而不是直接实例化。

    @Service和@Autowired注解

    接下来我们定义Service并获取用户列表,如下:

    package com.demo.springboot;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class UserService {
    
        @Autowired
        public  UserDAL userDAL;
    
        public List<User> getUsers(){
             return  userDAL.getUsers();
        }
    }

    @Service注解使用类路径扫描自动检测和配置Bean,上述注解@Service也可以起别名,@Autowired注解用来获取注册在Spring IOC容器中的bean对象,若使用构造函数注入,则无需使用注解@Aurowired。比如如下:

    package com.demo.springboot;
    
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class UserService {
    
        private UserDAL userDAL;
    
        public UserService(UserDAL userDAL) {
            this.userDAL = userDAL;
        }
    
        public List<User> getUsers() {
    
            return userDAL.getUsers();
        }
    }

    最后我们获取容器中的Service并获取用户列表,如下:

    package com.demo.springboot;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.ConfigurableApplicationContext;
    
    import java.util.List;
    
    @SpringBootApplication
    public class SpringbootApplication {
    
        public static void main(String[] args) {
    
            ConfigurableApplicationContext context = SpringApplication.run(SpringbootApplication.class, args);
            UserService userService = context.getBean(UserService.class);
            List<User> users = userService.getUsers();
    
            for (User user : users) {
                System.out.println("年龄:" + user.age + " 姓名:" + user.name);
            }
        }
    }

    总结

    本节我们学习了SpringBoot中几个基础注解,还是蛮简单的,好了本节内容到此为止,感谢您的阅读,我们下节见。

  • 相关阅读:
    IMWebConf 2017 官网彩蛋解谜
    解决SVG animation 在IE中不起作用
    百度大搜和度秘面经
    浅谈JavaScript原型与原型链
    听说2017你想写前端?
    如何制作icon-font小图标
    HTML5 CSS3 诱人的实例 :模仿优酷视频截图功能
    javaweb action无法跳转、表单无法跳转的解决方法
    hadoop备战:yarn框架的搭建(mapreduce2)
    liferay 指定默认首页
  • 原文地址:https://www.cnblogs.com/CreateMyself/p/12146453.html
Copyright © 2011-2022 走看看