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,@Autowired注解用来获取注册在Spring IOC容器中的bean对象。最后我们获取容器中的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中几个基础注解,还是蛮简单的,好了本节内容到此为止,感谢您的阅读,我们下节见。

原文地址:https://www.cnblogs.com/CreateMyself/p/12146453.html

时间: 2024-10-16 19:45:53

SpringBoot系列之入门篇(一)的相关文章

软件测试系列之入门篇

一.你知道软件测试有多重要吗? 在国际上,软件测试(软件质量控制)是一件非常重要的工程工作,测试也作为一个非常独立的职业.在IBM.Microsoft等开发大型系统软件公司,很多重要项目的开发测试人员的比例能够达到1:2甚至1:4. 在国内软件测试的地位还不够高,并且大多只停留在软件单元测试.集成测试和功能测试上.软件测试从业人员的数量同实际需求有不小差距,国内软件企业中开发人员与测试人员数量一般为5:1,因此,国内的软件测试产业化还有待开发和深掘. 说到这里不知道你反应是高兴还是失望?但是我却

C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?

C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ? 标签: c#objectuibyte通讯.net 2010-05-19 08:43 55212人阅读 评论(188) 收藏 举报  分类: 通讯类库设计(4)  版权声明:本文为博主原创文章,未经博主允许不得转载. 第一篇文章我相信很多人不看都能做的出来,但是,用过微软SerialPort类的人,都遇到过这个尴尬,关闭串口的时候会让软件死锁.天哪,我可不是武断,算了.不要太绝对了.99.9%的人吧,都遇到过这个问

Pandas系列之入门篇

Pandas系列之入门篇 简介 pandas 是 python用来数据清洗.分析的包,可以使用类sql的语法方便的进行数据关联.查询,属于内存计算范畴, 效率远远高于硬盘计算的数据库存储.另外pandas还提供了大数据存储的API--HDFStore,来对接HDF5. 安装 pandas 利用豆瓣源,速度快 pip install pandas numpy -i http://pypi.douban.com/simple --trusted-host pypi.douban.com pytabl

SpringBoot系列教程web篇之404、500异常页面配置

接着前面几篇web处理请求的博文,本文将说明,当出现异常的场景下,如404请求url不存在,,403无权,500服务器异常时,我们可以如何处理 原文友链: SpringBoot系列教程web篇之404.500异常页面配置 I. 环境搭建 首先得搭建一个web应用才有可能继续后续的测试,借助SpringBoot搭建一个web应用属于比较简单的活; 创建一个maven项目,pom文件如下 <parent> <groupId>org.springframework.boot</gr

SpringBoot系列教程web篇之重定向

原文地址: SpringBoot系列教程web篇之重定向 前面介绍了spring web篇数据返回的几种常用姿势,当我们在相应一个http请求时,除了直接返回数据之外,还有另一种常见的case -> 重定向: 比如我们在逛淘宝,没有登录就点击购买时,会跳转到登录界面,这其实就是一个重定向.本文主要介绍对于后端而言,可以怎样支持302重定向 I. 环境搭建 首先得搭建一个web应用才有可能继续后续的测试,借助SpringBoot搭建一个web应用属于比较简单的活; 创建一个maven项目,pom文

软件測试系列之入门篇(一)

一.你知道软件測试有多重要吗? 在国际上.软件測试(软件质量控制)是一件很重要的project工作.測试也作为一个很独立的职业. 在IBM.Microsoft等开发大型系统软件公司,许多重要项目的开发測试人员的比例可以达到1:2甚至1:4. 在国内软件測试的地位还不够高.而且大多仅仅停留在软件单元測试.集成測试和功能測试上.软件測试从业人员的数量同实际需求有不小差距.国内软件企业中开发者与測试人员数量一般为5:1.因此.国内的软件測试产业化还有待开发和深掘. 讲到这里不知道你反应是高兴还是失望?

SpringBoot系列教程web篇之Beetl环境搭建

前面两篇分别介绍了目前流行的模板引擎Freemaker和Thymeleaf构建web应用的方式,接下来我们看一下号称性能最好的国产模板引擎Beetl,如何搭建web环境 本文主要来自官方文档,如有疑问,推荐查看: http://ibeetl.com/guide/#beetl I. 准备 1. 依赖 首先我们是需要一个springboot项目,基本的pom结构大都相似 <parent> <groupId>org.springframework.boot</groupId>

SpringBoot系列教程web篇Listener四种注册姿势

java web三要素Filter, Servlet前面分别进行了介绍,接下来我们看一下Listener的相关知识点,本篇博文主要内容为SpringBoot环境下,如何自定义Listener并注册到spring容器 I. 环境配置 1. 项目搭建 首先我们需要搭建一个web工程,以方便后续的servelt注册的实例演示,可以通过spring boot官网创建工程,也可以建立一个maven工程,在pom.xml中如下配置 <parent> <groupId>org.springfra

【转】C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。

我假设读者已经了解了c#的语法,本文是针对刚打算解除串口编程的朋友阅读的,作为串口编程的入门范例,也是我这个系列的基础. 我们的开发环境假定为vs2005(虽然我在用vs2010,但避免有些网友用2005,不支持lambda,避免不兼容,就用2005来做例子) 一个基本的串口程序,既然是个程序了.我们就先从功能说起,包含 串口选择 波特率选择 打开 关闭 接受数据显示 发送数据输入 发送数据 数据量提示以及归零 好吧,有了这些功能,我们就先画出界面.例如: 这里,波特率就定死几种好了.直接界面上