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中几个基础注解,还是蛮简单的,好了本节内容到此为止,感谢您的阅读,我们下节见。

posted @ 2020-01-03 23:55  Jeffcky  阅读(370)  评论(0编辑  收藏  举报