美文网首页
spring boot基础

spring boot基础

作者: 萍水间人 | 来源:发表于2019-10-02 20:07 被阅读0次

    spring initializer可以选择新建一个spring boot应用然后打包下载

    之后使用IDEA导入

    参考imooc实现一个很简单的spring boot应用

    说一下自己的理解吧

    创建模型User

    新建一个用户模型,拥有id和name两个属性同时通过IDEA快捷方式生成了set和get还有toString方法

    package com.imooc.firsetappdemo.domain;
    
    /**
     * 用户模型
     */
    public class User {
        private int id;
        //用户名称
        private  String name;
    
        public int getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        /**
         * 强烈建议实现一些toString方法
         * @return
         */
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
    

    创建用户仓库进行存储

    此处我们采用内存模型进行存储

    使用了一个ConcurrentMap来保存用户

    package com.imooc.firsetappdemo.repository;
    import org.springframework.stereotype.Repository;
    
    import java.util.Collection;
    import java.util.Map;
    import java.util.Set;
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.concurrent.ConcurrentMap;
    import java.util.concurrent.atomic.AtomicInteger;
    
    import com.imooc.firsetappdemo.domain.User;
    /**
     * {@link User}{@link org.springframework.stereotype.Repository}
     */
    
    @Repository
    public class UserRepository {
    
        /**
         * 通过内存进行存储
         */
        private final ConcurrentMap<Integer, User>  repository =
                new ConcurrentHashMap<>();
    
    
        private final static AtomicInteger idGenerator = new AtomicInteger();
    
        /**
         * 保存用户对象
         * @param user
         * @return 如果保存成功<code>true</code>
         * 否则<code>false</code>
         */
        public boolean save(User user){
            //id自增
            Integer id = idGenerator.incrementAndGet(); //id从1开始
            user.setId(id);
            return repository.put(id,user)==null;
        }
    }
    

    编写控制器

    在控制器中我们注入UserRepository这个类

    同时进行了路由映射
    @PostMapping("/person/save")

    package com.imooc.firsetappdemo.controller;
    
    import com.imooc.firsetappdemo.domain.User;
    import com.imooc.firsetappdemo.repository.UserRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class UserController {
        /**
         * 注入
         */
        private final UserRepository userRepository;
    
        @Autowired
    
        public UserController(UserRepository userRepository) {
            this.userRepository = userRepository;
        }
    
        @PostMapping("/person/save")
        public User save(String name){
            User user = new User();
            user.setName(name);
            if (userRepository.save(user)) {
                System.out.printf("用户对象保存成功:%s\n", user);
            }
    
            return user;
        }
    }
    

    如何理解依赖注入

    之前学习thinkphp的时候就一直不明白依赖注入的原理

    现在回过头来看spring感觉有了一点眉目

    平常的Java开发中,程序员在某个类中需要依赖其它类的方法。
    通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理。
    Spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过Spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。
    依赖注入的另一种说法是"控制反转"。通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员。
    而控制反转是指new实例工作不由我们程序员来做而是交给Spring容器来做。

    参考

    spring依赖注入方式详解

    相关文章

      网友评论

          本文标题:spring boot基础

          本文链接:https://www.haomeiwen.com/subject/ansrpctx.html