springboot扩展

1springboot主启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MySpringbootApplication
{
    public static void main(String[] args) 
    {
        //spring项目默认主启动类
        SpringApplication.run(MySpringbootApplication.class, args);
    }
}

 @SpringBootApplication 是一个复合注解,把 @SpringBootApplication 看作是 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合。根据 SpringBoot 官网,这三个注解的作用分别是:

1@SpringBootConfiguration 

Spring配置类,标注在某个类上,表示这是一个SpringBoot的配置类

@Configuration : 说明这是一个配置类 ,配置类就是对应Spring的xml 配置文件,比如beans.xml,application.xml文件

2@ComponentScan

: 这个注解在Spring中很重要 ,它对应XML配置中的元素,扫码当前主启动类同级的包,自动扫描并加载符合条件的组件或者bean , 将这个bean定义加载到ioc容器中

我们介绍了2种注册bean的方式:1xml中配置bean 2使用注解方式配置bean,比如

Service,@Controller,@Repostory

为了更加简化bean的配置,springboot提出了@ComponentScan的方法

value:指定需要扫描的包,如:com.example.org

basePackages:作用同value;value和basePackages不能同时存在设置,可二选一

basePackageClasses:指定一些类,spring容器会扫描这些类所在的包及其子包中的类

nameGenerator:自定义bean名称生成器

resourcePattern:需要扫描包中的那些资源,默认是:**/*.class,即会扫描指定包中所有的class文件

useDefaultFilters:对扫描的类是否启用默认过滤器,默认为true

includeFilters:过滤器:用来配置被扫描出来的那些类会被作为组件注册到容器中

excludeFilters:过滤器,和includeFilters作用刚好相反,用来对扫描的类进行排除的,被排除的类不会被注册到容器中

lazyInit:是否延迟初始化被注册的bean

3@EnableAutoConfiguration

开启自动配置功能

注解没有实际作用,但他导入了AutoConfigurationImportSelector.class

public class AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware, ResourceLoaderAware, BeanFactoryAware, EnvironmentAware, Ordered

AutoConfigurationImportSelector实现了DeferredImportSelector

public interface DeferredImportSelector extends ImportSelector

DeferredImportSelector继承了ImportSelector,

可以看出,AutoConfigurationImportSelector 类实现了 ImportSelector 接口,也就实现了这个接口中的 selectImports 方法,该方法主要用于获取所有符合条件的类的全限定类名,需要为这些类创建对象并加载到 IoC 容器中。这个类就会读取SpringBoot提前写好的所有配置类,读取的关键是通过读取MEAT-INF/spring.factories文件写好的所有配置类。

@Import 注解介绍
从上面 @EnableAutoConfiguration 注解的源码可知,@Import(AutoConfigurationImportSelector.class) 也是@EnableAutoConfiguration 注解的组成部分,这也是自动配置功能的核心实现者。

@Import 注解位于 spring-context 项目内,主要提供导入配置类的功能

2热部署

1定义:

热部署(Hot Deployment)指的是在应用程序正在运行的情况下,对其进行更新或修改并将这些变更应用到正在运行的应用程序中的过程。通常情况下,传统的部署方式需要停止应用程序、部署更新,然后重新启动应用程序才能使更新生效。而热部署则允许在无需停止应用程序的情况下,即时地更新代码、配置文件或资源,从而提高了开发和部署的效率

用途:我们希望在我们更改代码后,不需要进行重启tomcat就可以实现更改后的代码效果.

2使用

1在pom.xml中添加依赖,刷新maven

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

2勾选自动构建项目,允许自动make启动

3SpringDataJPA

1定义:

JPA(Java Persistence API, Java 持久化API)是SUN公司提出的Java持久化规范,它提供了一种对象/关系映射的管理工具来管理Java中的关系型数据库。JPA的主要目的是简化现有的持久化开发工作并且整合ORM框架,JPA本身并不是ORM框架,它是一种规范,这种规范可以私下通过注解或者XML描述“对象-关系表”之间的映射关系,并将实体对象持久化到数据库中,从而极大地简化现有的持久化开发工作。

2使用

1导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

2配置数据源

server:
  port: 8080
  servlet:
    context-path: /
spring:
  datasource:com.mysql.jdbc.Driver
    url:jdbc:mysql://localhost:3306/mybatis
    username: root
    password: xuyinuo666
  jpa:
    database: MySQL
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    show-sql: true
    hibernate:
      ddl-auto: update

3创建实体类

@Entity//告诉程序是实体类
@Table(name = "user")//实体类对应的表名
public class User 
{
 
    @Id//主键标识
    @GeneratedValue(generator = GenerationType.IDENTITY)//主键生成策略
    private String id;
 
    @Column(name = "username", unique = true, nullable = false, length = 255)
    //name:被标注字段在数据库中所对应字段名称,unique:是否为唯一标识,nullable:是否可以为空
    //length:字段长度
    private String username;
 
    @Column(name = "password", nullable = false, length = 255)
    private String password;
}

4编写持久层接口

要求JpaRepository,JpaRepository中定义了CRUD方法

这是JpaRepository源码

定义一个接口继承JpaRepository

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
}
 
1查询操作

根据id查询单个信息

    @Test
    public void testFindById() 
    {
        User user = userRepository.findById(2).get();//根据id进行查询
        System.out.println(user.getusername());
    }

查询所有信息

    @Test
    public void testFindAll() 
   {
        List<User> users = userRepository.findAll();
        for(User user :users) 
        {
            System.out.println(user.getusername());
        }
    }
2增加操作
@Test
    public void testSave()
 {
 
        User user = new User(1, "laoda", 1654596);
        userRepository.save(user);
}
3更改操作
    @Test
    public void testUpdate() 
   {
        User user = userRepository.findById(1).get();
        user.setusername("lisi");
        userRepository.save(user);
    }
4删除操作
    @Test
    public void testDeleteById()
   {
      
        userRepository.deleteById(1);//根据id删除一个
    }

4Sa-token

1定义:

Sa-token是一个 Java 权限认证框架,主要解决:登录认证权限认证Session会话单点登录OAuth2.0微服务网关鉴权 等一系列权限相关问题。

2satoken使用

1导入依赖

<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.28.0</version>
</dependency>

2配置文件

server:
  port: 8001

sa-token:
  token-name: xc_satoken
  timeout: 2592000
  activity-timeout: -1
  #是否允许同一账号并发登录
  is-concurrent: true
  #多人登录是否共用一个token
  is-share: false
  token-style: uuid
  is-log: false

3编写Controller

package com.xc.satoken.controller;
 
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
@RequestMapping("/test")
public class TestController {
 
    @PostMapping("/login")
    public String login(String username,String password)
    {
        //模拟登录校验
        if(username.equals("zhangsan") && password.equals("666"))
        {
            StpUtil.login(1001);//使用satoken进行登录
            return "登陆成功";
        }
        return "登陆失败";
    }
 
    @GetMapping("/islogin")
    public String test()
    {
        return "当前会话是否登录:" + StpUtil.isLogin();//使用satoken判断是否登录
    }
}
 

3常用功能

1登录与注销

StpUtil.login(Object id); //登录 
 
StpUtil.logout();//注销
 
StpUtil.isLogin();//判断是否登录

2权限认证

只需要创建一个实现StpInterface接口的类,重写getPermissionListgetRoleList两个方法,返回权限列表以及角色列表就可以,sa-token内部会自动判断接口所需的权限字符串或者角色字符串是否在返回的List中


@Component  
public class StpInterfaceImpl implements StpInterface {

   //获取用户的权限集合
    @Override
    public List<String> getPermissionList(Object loginId, String loginType) 
   {
        List<String> list = new ArrayList<String>();   
        list.add("user.add");
        list.add("user.delete");
        list.add("user.update");
        list.add("user.select");
        return list;
    }

    //获取用户的角色集合
    @Override
    public List<String> getRoleList(Object loginId, String loginType) 
   {
        List<String> list = new ArrayList<String>();    
        list.add("custom");
        list.add("business");
        return list;
    }

}

StpUtil.hasPermission("user-update");   //判断是否有指定权限     
StpUtil.checkPermission("user-update");        
StpUtil.checkPermissionAnd("user-update", "user-delete");//判断是否具有所有权限       
StpUtil.checkPermissionOr("user-update", "user-delete");        
 

StpUtil.hasRole("business"); //判断是否有指定角色       
StpUtil.checkRole("businessn");        
StpUtil.checkRoleAnd("business", "custom"); //判断是否有多个指定角色       
StpUtil.checkRoleOr("business", "custom");        
 

3注销

StpUtil.logout(666);   // 强制指定账号注销下线 
StpUtil.logout(666, "PC");  // 强制指定账号指定端注销下线 
StpUtil.logoutByTokenValue("token1");      // 强制指定 Token 注销下线 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值