spring学习1


AOP

目标对象:即被代理对象

连接点:被拦截的对象(方法)。

切面:定义切点、各类通知和引入的内容

切点

使用正则表达式和指示器规则去匹配多个类的不同方法

通知:按照约定的流程下的方法

  • 前置通知
  • 后置通知
  • 环绕通知
  • 事后返回通知
  • 异常通知

织入

通过动态代理技术,为原有服务对象生成代理对象,然后将与切点定义匹配的连接点拦截,并按照约定将各类通知织入约定的流程的过程

IOC容器

依赖注入

将底层类作为参数传递给上层类,实现上对下的控制

Spring IOC

  • BeanFactory接口的简单容器
  • ApplicationContext应用上下文

Bean

定义Bean

@Component Spring基础的注解,被Spring管理的组件或bean
@Repository 用于持久层,数据库访问层,是用来直接访问数据库的
@Service 用于服务层,处理业务逻辑
@Controller 用于呈现层,(Spring MVC),暴露给前端的入口

注入bean

@Autowired 默认是按照资源的类型(class)查找并注入
@Resource 默认是按照资源的名称(name)查找并注入
@Qualifier 采用@Autowired如果存在多个实现类的情况下,@Qualifier注解通过资源名称确定唯一性

Bean的作用域

作用域类型 使用范围 作用域描述
singleton 所有Spring应用 默认值,IOC容器只存在单例
prototype 所有Spring应用 每当从IOC容器中取出一个Bean,则创建一个新的Bean
session Spring Web应用 Http会话
application Spring Web应用 Web工程生命周期
request Spring Web应用 Web工程单次请求
globalSession Spring Web应用 在一个全局的HTTP Session中,一个Bean的定义对应一个实例。实践中基本不使用

Bean的加载逻辑

  1. 转换BeanName
  2. 从缓存中加载实例
  3. 实例化Bean
  4. 检查parentBeanFactory
  5. 初始化依赖的Bean
  6. 创建Bean

配置文件

  1. @Value

    使用单个配置的时候,使用它

    下面2个是用于配置项很多,且相互之间有联系,配置扔进类里,并加上下面2个

  2. @Component

    使用之后,对象会自动的实例化

  3. @ConfiguartionProperties

配置开发环境和生产环境的配置文件

正常项目属性配置

  • [项目属性配置] application.properties文件设置配置
  • [项目属性配置] application.yml文件设置配置
  • [项目属性配置] 自定义属性配置参数间引用
  • [项目属性配置] 多环境动态配置

这次学习,使用的是application.yml

path: 项目/src/main/resources/

总配置文件: application.yml

spring:
  profiles:
    active: dev

开发环境配置文件:application-dev.yml

server:
  port: 8081
  servlet:
    context-path: /luckymoney
# 配置对象 
limit:
  minMoney: 0.01   # 配置最小红包金额
  maxMoney: 9999   # 配置最高红包金额
  description: 最少要发${limit.minMoney}元, 最多${limit.maxMoney}元 # 描述

生产环境配置项:application-prod.yml:

server:
  port: 8081
  servlet:
    context-path: /luckymoney
limit:
  minMoney: 1
  maxMoney: 9999
  description: 最少要发${limit.minMoney}元, 最多${limit.maxMoney}元

红包配置类

path: 项目/src/main/java/包/LimitConfig.java

package com.imooc.luckymoney;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
@Component
@ConfigurationProperties(prefix = "limit")
public class LimitConfig {
    private BigDecimal minMoney;
    private String description;
    private BigDecimal maxMoney;
    public BigDecimal getMinMoney() {
        return minMoney;
    }
    public void setMinMoney(BigDecimal minMoney) {
        this.minMoney = minMoney;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public BigDecimal getMaxMoney() {
        return maxMoney;
    }
    public void setMaxMoney(BigDecimal maxMoney) {
        this.maxMoney = maxMoney;
    }
}

Controller的使用

  • @Controller:处理http请求
  • @RestControllerSpring4之后新加的注解,原来返回json需要@ResponseBody配合@Controller
  • @RequestMapping:配置url映射
  • @GetMapping: 新版url映射
@Controller + @ResponseBody = @RestController
  • @PathVariable:获取url中的数据
  • @RequestParam:获取请求参数的值

红包接口实现

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;
@RestController
public class LuckymoneyController {
    @Autowired
    private LuckymoneyRepository repository;
    @Autowired
    private LuckymoneyService service;
    /**
     * TODO: 获取红包列表
     * @return List
     */
    @GetMapping("/luckymoneys")
    public List<Luckymoney> list() {
        return repository.findAll();
    }
    @PostMapping("/luckymoney")
    /**
     * 创建红包
     * @description: TODO: create luckymoney
     * @author: Virus
     * @date: 2020/1/18 21:30
     * @param producer
     * @param money
     * @return com.imooc.luckymoney.Luckymoney
     */
    public Luckymoney create(@RequestParam("producer") String producer,
                             @RequestParam("money") BigDecimal money) {
        Luckymoney luckymoney = new Luckymoney();
        luckymoney.setProducer(producer);
        luckymoney.setMoney(money);
        return repository.save(luckymoney);
    }
    @GetMapping("/luckymoneys/{id}")
    /**
     * @description: TODO: 通过id查找红包
     * @author: Virus
     * @date: 2020/1/18 21:34
     * @param id
     * @return com.imooc.luckymoney.Luckymoney
     */
    public Luckymoney findById(@PathVariable("id") Integer id) {
        // 查到直接返回对象,查不到返回null
        return repository.findById(id).orElse(null);
    }
    @PutMapping("/luckymoneys/{id}")
   /**
    * @description: TODO: 更新红包
    * @author: Virus
    * @date: 2020/1/18 21:40
    * @param id
    * @param consumer
    * @return com.imooc.luckymoney.Luckymoney
    */
    public Luckymoney update(@PathVariable("id") Integer id,
                             @RequestParam("consumer") String consumer) {
        // 先查询数据
        Optional<Luckymoney> optional = repository.findById(id);
        if (optional.isPresent()) {
            Luckymoney luckymoney = optional.get();
            // 修改数据
            luckymoney.setConsumer(consumer);
            return repository.save(luckymoney);
        }
        return null;
    }
    @PostMapping("/luckymoneys/two")
    public void createTwo() {
        service.createTwo();
    }
}

事务

数据库事务,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。

服务

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
@Service
public class LuckymoneyService {
    @Autowired
    private LuckymoneyRepository repository;
    @Transactional
    /**
     * 事务:指数据库事务
     * @description: TODO
     * @author: Virus
     * @date: 2020/1/19 10:58
     * @param  * @param
     * @return void
     */
    public void createTwo() {
        Luckymoney luckymoney1 = new Luckymoney();
        luckymoney1.setProducer("test1");
        luckymoney1.setMoney(new BigDecimal("520"));
        repository.save(luckymoney1);
        Luckymoney luckymoney2 = new Luckymoney();
        luckymoney2.setProducer("test1");
        luckymoney2.setMoney(new BigDecimal("1314"));
        repository.save(luckymoney2);
    }
}

thymeleaf依赖


    org.springframework.boot
    spring-boot-starter-thymeleaf

文章作者: virus
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 virus !
 上一篇
git操作 git操作
生成SSH KEY 下载git.exe这个就不用说了吧。。。 下完之后会有个git bash,打开这个 输入命令 ssh-keygen -t rsa -C "email@email.com" # "email@email.com"是你的g
2020-04-04
下一篇 
TP5遇到的一些问题 TP5遇到的一些问题
ThinkPHP5.1中的更新操作更新数据 $res = Db::name('user')->where('id', 1)->update(['name' => 'thinkphp']); 实际生成的SQL语句可能是: UPDATE `th
2020-04-04
  目录