尽览Springboot从入门到精通的泣血心酸

一、基础理论 

1、产生背景
    SSM开发web应用配置复杂,springboot极大地简化了配置,让开发人员更多关注与业务逻辑的实现。

2、Springboot特性
    A。能够快速创建基于spring的应用程序。
    B。java main方法可启动内嵌的tomcat服务器来运行springboot程序,不需要部署war包文件。
    C。起步依赖简化maven配置。
    D。根据maven依赖自动配置spring、springmvc。
    E。完全弃用XML配置,采用注解配置。

3、Springboot四大核心
    自动配置:自动配置spring、springmvc。
    起步依赖:起简化maven配置。
    Actutor:健康检查,检测程序运行状况,一般用不到。
    命令化界面:一般也用不到。

    一般只用得到前两种。

4、springboot零碎知识点
resources目录下:
    static:存放图片、js、cs等静态资源。
    templates:存放前端模板。
    application.properties:springboot核心配置文件。

  SpringBootApplication:
        springboot项目入口类中的核心注解,没有该注解,该入口类就是普通的java类。
    注意:
        springboot项目的所有代码类必须在入口类同级或下一级的目录位置。

5、springboot核心配置文件
    可以是*.properties文件,也可以是*.yml(*.ymal)文件,都是键值对形式
    两个同时存在,以*.properties为准
    *.yml虽然也是键值对形式,但是书写格式还是有不同的,用到的时候百度
    配置文件常用做法:
        application-dev.properties:开发环境配置文件
        application-tes.properties:测试环境配置文件
        application-pro.properties:生产环境配置文件
        然后在application.properties中设置:
            spring.profiles.active=dev   //表明当前生效的是开发环境的配置文件

6、自定义配置
A、将自定义配置映射到属性
aplication.properties中:
    #自定义配置,将配置的属性自动注入到属性中
    name=lily
    age=18
代码中:
    @Value("${name}")  //自动注入配置文件的中name的值
    private String name;
    @Value("${age}") //自动注入配置文件的中age的值
    private  int age;

    //获取自动注入的属性值,打印在前台
    @RequestMapping(value="intro")
    @ResponseBody
    public String intro(){
        return "I'm "+name+","+age+" years old!!";
    }
    
B、将自定义配置映射到对象
aplication.properties中:
    #自定义配置,将配置的对象属性自动注入到属性中
    school.name=CAUC
    school.address=Tianjin
对应配置类:
    @Component  //将此类交给Spring容器进行管理,方便诸如对象
    @ConfigurationProperties(prefix = "school") //本类只读取配置文件中前缀为school的属性
    public class School {
        private String name;
        private String address;

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAddress() {
        return address;
        }
        public void setAddress(String address) {
        this.address = address;
        }
}
代码中:
    @Autowired //自动注入对象
    private School school;

    //获取自动注入的对象的属性值,打印在前台
    @RequestMapping(value="intro2")
    @ResponseBody
    public String intro2(){
        return school.getName()+" is a university in "+school.getAddress();
    } 



7、注意事项
ConfigurationProperties警告:
    
    在使用@ConfigurationProperties注解时,会报一个警告:
        Spring Boot Configuration Annotation Processor not Configured。算该警告不影响运行,但看着烦,如何解决??
    解决方式,在pom.xml文件中添加如下依赖即可:
        
             org.springframework.boot
             spring-boot-configuration-processor
             true
         


application.properties中文乱码问题 :
    见图片A

尽览Springboot从入门到精通的泣血心酸_第1张图片

二、Springboot集成jsp

1、前置设置:
  main-->new-->directory-->webapp(创建web资源文件夹)
  file-->project structure-->modules-->找到该项目-->web-->将刚刚创建的webapp设置为web资源文件路径
    具体见图B 

2、添加jsp依赖
        
        
        
            org.apache.tomcat.embed
            tomcat-embed-jasper
        

3、指定jsp编译文件路径
在标签中添加:
        
        
            
                
                src/main/webapp
                
                META-INF/resources
                
                    
                    *.*
                
            
        

4、设置SpringMC的视图解析器
aplication.properties中:
    #配置springmvc的视图解析器
    spring.mvc.view.prefix=/
    spring.mvc.view.suffix=.jsp
webapp/show1.jsp文件:
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        show1.jsp
    
    
        

${message}

webapp/show2.jsp文件: <%@ page contentType="text/html;charset=UTF-8" language="java" %> show2.jsp

${message}

代码中: /* 视图解析器 */ @RequestMapping(value="show1") public ModelAndView show1(){//ModelAndView可以返回一个jsp页面,且可用来设置jsp内容 ModelAndView model=new ModelAndView(); model.addObject("message","hello,springboot"); model.setViewName("show1"); return model; } @RequestMapping(value="show2") public String show2(Model model){ model.addAttribute("message","hello2,springboot"); return "show2"; }

尽览Springboot从入门到精通的泣血心酸_第2张图片

三、springboot集成mybatis

1、修改pom.xml文件
        
        
            mysql
            mysql-connector-java
        
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.0.0
        

2、利用mybatis的逆向工程对单表生成实体bean、映射文件、mapper接口
在项目根目录新建文件GeneratorMapper.xml,添加如下内容:

    





    
    

    
    
    
        
            
        
        
        
        
    
        
        
            
            
        

        
        
            
        

        
        
            
        

        
        

在pom.xml文件中添加插件依赖:
            
                org.mybatis.generator
                mybatis-generator-maven-plugin
                1.3.6
                
                    
                    GeneratorMapper.xml
                    true
                    true
                
            

3、配置完成后在maven的plugins中找到mybatis-generator:generate并双击,即可生成实体类、映射文件和mapper接口。
        见图3.1
   


4、生成的实体bean、mapper接口和映射文件
实体bean:
import java.util.Date;
public class Student {
    private Integer sid;
    private String sname;
    private Date sage;
    private String ssex;
    public Integer getSid() {return sid;}
    public void setSid(Integer sid) {this.sid = sid; }
    public String getSname() {return sname;}
    public void setSname(String sname) {this.sname = sname;}
    public Date getSage() {return sage;}
    public void setSage(Date sage) {this.sage = sage;}
    public String getSsex() { return ssex;}
    public void setSsex(String ssex) {this.ssex = ssex;}
}

mapper接口:
public interface StudentMapper {
    int deleteByPrimaryKey(Integer sid);

    /**
     * 传入对象进行
     *  修改和选择性修改
     * 
     * @param record
     * @return
     */
    int insert(Student record);
    int insertSelective(Student record);

    Student selectByPrimaryKey(Integer sid);

    /**
     * 传入对象进行
     *      更新和选择性更新
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(Student record);
    int updateByPrimaryKey(Student record);
}


映射文件StudentMapper.xml:


  
  
    
    
    
    
    
  
  
  
    sid, sname, sage, ssex
  
  
  
  
    delete from t_student
    where sid = #{sid,jdbcType=INTEGER}
  
  
    insert into t_student (sid, sname, sage, 
      ssex)
    values (#{sid,jdbcType=INTEGER}, #{sname,jdbcType=VARCHAR}, #{sage,jdbcType=DATE}, 
      #{ssex,jdbcType=CHAR})
  
  
  
    insert into t_student
    
      
        sid,
      
      
        sname,
      
      
        sage,
      
      
        ssex,
      
    
    
      
        #{sid,jdbcType=INTEGER},
      
      
        #{sname,jdbcType=VARCHAR},
      
      
        #{sage,jdbcType=DATE},
      
      
        #{ssex,jdbcType=CHAR},
      
    
  
  
  
    update t_student
    
      
        sname = #{sname,jdbcType=VARCHAR},
      
      
        sage = #{sage,jdbcType=DATE},
      
      
        ssex = #{ssex,jdbcType=CHAR},
      
    
    where sid = #{sid,jdbcType=INTEGER}
  
  
    update t_student
    set sname = #{sname,jdbcType=VARCHAR},
      sage = #{sage,jdbcType=DATE},
      ssex = #{ssex,jdbcType=CHAR}
    where sid = #{sid,jdbcType=INTEGER}
  



5、注意事项
    在java文件夹只能编译java文件,而mapper包下的mapper映射文件是配置文件,无法编译!

解决方案一:在pom.xml文件中的标签的子标签标签中添加:
            
            
                src/main/java
                
                    
                    **/*.xml
                
            


解决方案二:
    在项目的resources下新建mapper文件夹并剪切移入所有的映射文件
    然后再*.properties中配置:
         mybatis.mapper-locations=classpath:mapper/*.xml
    

两种方式都很常用
 
  

尽览Springboot从入门到精通的泣血心酸_第3张图片

四、SpringBoot集成Mybatis示例 

1、pom.xml文件

pom.xml文件





    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.3.1.RELEASE
         
    
    com.farben.unit
    springunit
    0.0.1-SNAPSHOT


    
        1.8
    

    
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        

        

        
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        
        
        
        
            org.apache.tomcat.embed
            tomcat-embed-jasper
        
        
        
            mysql
            mysql-connector-java
        
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.0.0
        
    

    
        
            
            
                src/main/java
                
                    
                    **/*.xml
                
            
            
            
                
                src/main/webapp
                
                META-INF/resources
                
                    
                    *.*
                
            
        
        
            
            
                org.springframework.boot
                spring-boot-maven-plugin
            
            
            
                org.mybatis.generator
                mybatis-generator-maven-plugin
                1.3.6
                
                    
                    GeneratorMapper.xml
                    true
                    true
                
            
        
    

2、application.properties文件

#给内置tomcat配置端口
server.port=8090

#设置上下文根,访问servlet别名前需加/s
server.servlet.context-path=/s

#配置数据库连接   mysql8的驱动名称变了,是com.mysql.cj.jdbc.Driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/d_student?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456

3、GeneratorMapper.xml文件







    
    

    
    
    
        
            
        
        
        
        
    
        
        
            
            
        

        
        
            
        

        
        
            
        

        
        

4、代码

控制层Controller

@Controller
public class StudentController {

    @Autowired  //注入service层对象
    private StudentService service;

    @RequestMapping(value="stu")
    @ResponseBody
    public Object getOneStudent(Integer id){
        Student student=service.getStudentById(id);
        return student;
    }
}


业务层service

public interface StudentService {
    Student getStudentById(Integer id);
}

@Service //扫描service到spring容器,便于自动注入对象
public class StudentServiceImpl implements StudentService {

    @Autowired  //自动注入mapper层对象
    private StudentMapper mapper;

    @Override
    public Student getStudentById(Integer id) {
        return mapper.selectByPrimaryKey(id);
    }
}


model层:自动生成

mapper层:自动生成

只是mapper接口需要添加@Mapper注解即可
如下图:
    @Mapper  //扫描mapper接口到spring容器,便于自动注入对象
    public interface StudentMapper {
        int deleteByPrimaryKey(Integer sid);
        int insert(Student record);
        int insertSelective(Student record);
        Student selectByPrimaryKey(Integer sid);
        int updateByPrimaryKeySelective(Student record);
        int updateByPrimaryKey(Student record);
    }

注意:
    mapper层注解卸载接口上,service层注解卸载实现类上。



注意事项:
    如果是多表查询,则必然有多个mapper接口,每个mapper接口都手动添加@Mapper注解,很繁琐
    
解决:
    所有mapper接口均不需要添加@Mapper注解
    改为在springboot启动入口程序类上添加:
        @MapperScan(basePackages = "com.farben.springboot.mapper")
    指定需要扫描的mapper包的具体路径,此后该mapper包下所有类都可以使用注解@Autowired自动注入对象。
        
    

5、补充springboot事务

只需要在Service实现类的增删改方法上增加一个@Transactional注解即可。

注意:
    在springboot2.0版本之前,还需要在入口类上添加@EnableTransactionManagement注解来开启事务。


示例:

@Service
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentMapper mapper;

    @Override
    @Transactional  //  开启事务并自动提交   10/0失败,则查询也会失败
    public Integer updateByid(Student student) {
        Integer result=mapper.updateByPrimaryKeySelective(student);

        Integer i=10/0;
        return result;
    }



}

五、SpringBoot集成SpringMVC

1、新建好一个springboot项目,其实就集成好了SpringMVC。

2、SpringMVC自定义视图解析器,见SpringBoot集成JSP。

3、SpringMVC核心注解

@Controller:
    表名该类是控制层,用于处理http请求。
@ResponseBody:
    表名该方法返回一个json字符串。
@RestController:
    表名该controller类下所有方法都返回一个json字符串。

@RequestMapping:
    表名该方法可用来处理GET和post请求。用来给servlet起别名。
@GetMapping:
    表名该方法可用来处理GET请求。用来给servlet起别名。
@PostMapping:
    表名该方法可用来处理POST请求。用来给servlet起别名。

    
注意:
    从浏览器地址栏发的请求都是GET请求,要发post请求可以使用postman客户端。

还有两个用得不多的注解:
    @DeleteMapping:
        表名该方法可用来处理DELETE请求。用来给servlet起别名。
    @PutMapping:
        表名该方法可用来处理PUT请求。用来给servlet起别名。

六、Springboot实现RESTful

1、RESTful是一种软件设计风格,一个架构只要符合RESTful原则,责成其为RESTful架构。
    说白了就是在浏览器地址栏以路径的方式传参。

2、示例
       访问一个接口的HTTP地址:http://localhost:8090/s/stu?id=3
       RESTful风格的HTTP地址:http://localhost:8090/s/stu/3

    而在Controller层的servlet方法中:

    /**
     * RESTful
     * 原则一:
     *  新增用PostMapping,删除用DeleteMapping,修改用PutMapping,查询用GetMappring
     *  这样的话如果增删改都要传sid和sname参数
     *      当都通过http://localhost:8090/s/stu/info/1/赵雷  访问,可以通过请求方式加以区别
     *      当然,如果有两个相同的删除方法,所需要的参数也一致,则可以调整参数位置加以区别
     *      如下:
     *          stu/info/{sid}/{sname}
     *          stu/{sid}/info/{sname}
     *原则二:
     *  RESTful方式访问时参数最好都是数据库表字段,非数据库表字段用传统问号拼接即可
     *
     */
    @GetMapping(value="stu/info/{sid}/{sname}")
    @ResponseBody
    public Object getName(@PathVariable("sid") Integer sid,@PathVariable("sname") String sname){
        return "sid:"+sid+"-sname:"+sname;
    }
        

七、Springboot集成Redis

1、在pom.xml中添加redis依赖
        
            org.springframework.boot
            spring-boot-starter-data-redis
        

2、在*.properties中添加redis配置信息
    spring.redis.host=localhost
    spring.redis.port=6379
    spring.redis.password=123456

3、插入获取redis数据示例
    见图11.1、11.2

尽览Springboot从入门到精通的泣血心酸_第4张图片

尽览Springboot从入门到精通的泣血心酸_第5张图片

八、SpringBoot集成Dubbo

1、需要三个modual,一个为接口工程,一个为服务提供者,一个为服务消费者。
    接口工程:存放实体bean和业务接口。
            maven工程:dubbo-interfaces
    服务提供者:存放业务接口的实现类,并将服务注册到服务中心,调用数据持久层。
            springboot web工程:dubbo-providers
    服务消费者:从注册中心调用服务提供者提供的服务,来处理浏览器发出的请求。 springboot web工程
            springboot web工程:dubbo-consumers

2、配置
A、添加依赖(服务者和消费者都需要添加)
       
        
            com.alibaba.spring.boot
            dubbo-spring-boot-starter
            2.0.0
        
        
        
            com.101tec
            zkclient
            0.11
        
        
        
            com.farben.springboot
            dubbo-interfaces
            1.0.0
        

B、修改application.properties配置文件
服务提供者:

#内置tomcat端口
server.port=8091   #别和服务消费者一样
#设置上下文根
server.servlet.context-path=/s

#dubbo的配置
spring.application.name=dubbo-providers
#声明当前项目是服务提供者
spring.dubbo.server=true
spring.dubbo.registry=zookeeper://127.0.0.1:2181

服务消费者:

#内置tomcat端口
server.port=8090
#设置上下文根
server.servlet.context-path=/s

#dubbo的配置
spring.application.name=dubbo-consumers
#注册中心
spring.dubbo.registry=zookeeper://127.0.0.1:2181

C、注册中心
    一般使用zookeeper,可以在windows上搭建一个单节点的即可。
    下载地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
    解压后,拷贝配置文件为zoo.cfg,并修改dataDir属性为自定义的目录,然后在bin下情动zkServer.cmd即可。


3、代码书写
dubbo-consumers:
Controller:

@Controller
public class StudentController {
    /**
     *  Reference注解是dubbo的注解,别导错了
     * 表明要从注册中心引用已经暴露的服务,即StudentService.class
     */
    @Reference(interfaceClass = StudentService.class,version="1.0.0",check=false)
    private StudentService service;

    @RequestMapping(value="dubbo/{id}")
    @ResponseBody
    public Object getOneStudent(@PathVariable("id") Integer id){
        return service.getOneStudent(id);
    }
}


dubbo-interfaces:
Service:
public interface StudentService {
    Object getOneStudent(Integer id);
}


dubbo-providers:
Service.impl

@Component  //将类加入spring容器
//将服务暴露给注册中心。这是dubbo的注解,别导错了
@Service(interfaceClass = StudentService.class,version = "1.0.0",timeout = 10000)
//父接口类对象、版本、超时时间
public class StudentServiceImpl implements StudentService {
    @Override
    public Object getOneStudent(Integer id) {
        return 12;
    }
}

3、三个注解
@EnableDubboConfiguration  在服务提供者和服务消费者的入口程序上添加,表明开启dubbo配置。
@Service   dubbo的注解,别导错了。在业务接口上添加,将服务暴露给注册中心。
@Reference dubbo的注解,别导错了。在控制层上使用表明从注册中心引用服务。


4、注意事项:
    在dubbo-providers和dubbo-consumers的springboot入口类上都需要加入@EnableDubboConfiguration注解来开启dubbo的配置
    启动时zkServer.cmd,再启动dubbo-providers,最后启动dubbo-consumers。
    Dubbo要求实体类bean需要实现序列化接口。

九、Springboot使用拦截器

1、拦截器和过滤器
过滤器拦截的是servlet,而在springmvc之后,只剩下一个公有的servlet,原本的多个servlet已有多个单元
方法替代,而拦截器拦截的就是这些单元方法。

过滤器在servlet之前,而拦截器在servlet之后,单元方法之前。

2、拦截器配置
A、自定义的拦截器类需要实现HandlerInterceptor接口,重写preHandle方法,在方法中定义拦截器规则。
B、需要一个配置类,配置类使用@Configuration声明,并实现WebMvcConfigurer接口,重写
addInterceptors方法,在方法中定义拦截器拦截范围。

3、代码示例
model:

@Component
public class User {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}



interceptor:

/**
 * 拦截器,定义拦截器规则
 * 实现HandlerInterceptor接口,重写preHandle
 * 并在preHandle方法中定义
 * session中有user,则返回true。直接访问
 * 没有user,则重定向/user/error,返回false
 */
public class UserLoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
       User user=(User)request.getSession().getAttribute("user");
       if(user==null){
           response.sendRedirect(request.getContextPath()+"/user/error");
           return false;
       }
        return true;
    }
}



config:

/**
 * 拦截器配置类,定义拦截器拦截范围
 * addPathPatterns表明拦截的范围 假设为为【1,5】
 * excludePathPatterns表名在要拦截的范围中排除的范围 假设为2,3
 * 则真正拦截范围为1,4,5
 *  /user/**  代表只要开头为/user,后面随便是什么,随便有多少级子目录
 *  /user/*   代表只要开头为/user,后面随便是什么,只有一级子目录
 */
@Configuration
public class UserConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        String [] addPathPatterns={
                "/user/**"
        };
        String [] excludePathPatterns={
                "/user/login","/user/error"
        };
        registry.addInterceptor(new UserLoginInterceptor()).
                addPathPatterns(addPathPatterns).
                excludePathPatterns(excludePathPatterns);
    }
}



controller:

@Controller
@RequestMapping(value="/user")
public class UserLoginInterceptorTest {

    @Autowired
    private User user;

    //登陆的方法,不登陆也可访问
    @RequestMapping(value="/login")
    public @ResponseBody String login(HttpServletRequest req){
        req.getSession().setAttribute("user",user);
        return "login succeed!";
    }
    //登陆后才能访问的方法
    @RequestMapping(value="/center")
    public @ResponseBody String center(){
        return "after login succeed,you can enter the center area!";
    }
    //登陆失败跳转的方法,不登陆也可访问
    @RequestMapping(value="/error")
    public @ResponseBody String error(){
        return "you must login first!!";
    }
}

十、Springboot程序打包

1、打包分类
打包其实可以打jar包,也可以打war包。一般打jar包居多。

2、区别
    jar:
        是springboot应用程序默认的打包方式。
        jar包运行不依赖外置tomcat。
        .properties文件中的端口号等配置会生效。
        浏览器访问启动的jar不需要在路径中添加jar包名称。
    war:  
        需要在pom文件中通过war启用war包打包方式。
        war包运行依赖外置的tomcat服务器,war包需要放在tomcat的wabapps目录下。
        .properties文件中的端口号等配置不会生效。
        浏览器访问启动的war需要在路径中添加war包名称。

3、打jar包的配置
    
        
        firstSpringBootJar
        
            
            
                src/main/resources
                
                    **/*.*
                
            
        
        
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                1.4.2.RELEASE
            
        
    

配置完成先clean再package,然后将target下的jar包copy出来,放到任意地方,通过cmd运行“java -jar 
jar包名.jar”即可运行springboot程序,打开浏览器访问即可。不需要加Jar包名。



4、打war包的配置

    
    war
      
        
        firstSpringBootWar
        
            
            
                src/main/resources
                
                    **/*.*
                
            
        

修改入口类

@SpringBootApplication
public class SpringbootApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
       SpringApplication.run(SpringbootApplication.class, args);

    }

    /**
     *  打jar包必须有这方法
     * @param builder
     * @return
     */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringbootApplication.class);
    }
}



配置完成先clean再package,然后将target下的war包copy出来,放到tomcat的webapps目录下,返回
tomcat的bin目录双击startup.bat即可运行springboot程序,打开浏览器访问即可。需要加War包名。
    

十一、Springboot集成logback日志

1、基础
    logback实际上是第三版的log4j,是最新的。
    日志级别有低到高:trcae
        
            org.projectlombok
            lombok
        

在resources下新建logback-spring.xml文件






    
    
        
            debug
        
        
            %date [%-5p] [%thread] %logger{60} {%file : %line} %msg%n
            
            UTF-8
        
    

    
    
        D:/springboot.log
        
            %date [%-5p] [%thread] %logger{60} {%file : %line} %msg%n
            UTF-8 
        
        
            D:/springboot.log.%d{yyyy-MM-dd}.log
            15
        
    

    
    

    
    
        
        
    






注意:

    代码中使用logger.info()等代码,该类还必须添加@Slf4j注解。

十二、关闭/修改springboot工程启动logo

1、关闭logo

直接上代码
@SpringBootApplication 
public class SpringbootApplication {

    public static void main(String[] args) {
        /**
         * 关闭springboot 启动logo
         */
        SpringApplication spring=new SpringApplication(SpringbootApplication.class);
        spring.setBannerMode(Banner.Mode.OFF);
        spring.run(args);
    }

}




2、修改logo
A、访问
    https://www.bootschool.net/ascii
    或
    http://patorjk.com/software/taag/
    
    输入文字,获得想要更改的logo图样,拷贝下来。

B、在resources文件夹下创建banner.txt文件
    将复制下来的logo拷贝到该文件保存启动程序即可看到自定义的logo。
    
文件名必须叫banner.txt

十三、springboot使用过滤器

1、过滤器配置

第一种方式:
    A、自定义过滤器用@WebFilter(urlPatterns = "过滤路径") 标注,实现Filter接口,复写doFilter方法。
    B、入口类用@ServletComponentScan(basePackages = "com.farben.springboot.filter")标准,配置被扫描的过滤器路径。


第二种方式:
    A、自定义过滤器实现Filter接口,复写doFilter方法。
    B、自定义配置类,加@Configuration标注,在类中自定义方法,方法中注册过滤器,添加过滤路径,并返回这个过滤器。


2、第一种方式代码
filter:

@WebFilter(urlPatterns = "/user")  //过滤掉“/user”
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("进入自定义过滤器");
        chain.doFilter(request,response);
    }
}


controller:

@Controller
public class MyFilterTest {

    @RequestMapping(value="/user")
    public @ResponseBody String user(){
        return "user info show over!!";
    }

    @RequestMapping(value="/stu")
    public @ResponseBody String stu(){
        return "can't come in filter";
    }
}


入口类:

@SpringBootApplication
@ServletComponentScan(basePackages = "com.farben.springboot.filter")   //servlet扫描路径
public class SpringbootFilterApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootFilterApplication.class, args);
    }
}




3、第二种方式代码

filter:

public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("欢迎进入过滤器");
        chain.doFilter(request,response);
    }
}

配置类config

@Configuration //定义为配置类
public class MyFilterConfig {

    @Bean
    public FilterRegistrationBean myFilterRegistration(){
        //注册过滤器
        FilterRegistrationBean myFilter = new FilterRegistrationBean(new MyFilter());
        //添加过滤器路径
        myFilter.addUrlPatterns("/user");
        return myFilter;
    }
}

controller:

@Controller
public class MyFilterTest {

    @RequestMapping(value="/user")
    public @ResponseBody
    String user(){
        return "user info show over!!";
    }

    @RequestMapping(value="/stu")
    public @ResponseBody String stu(){
        return "can't come in filter";
    }
}

入口类:

@SpringBootApplication
public class SpringbootFilter2Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootFilter2Application.class, args);
    }

}

 十四、SpringBoot创建java工程



1、和springboot web工程区别
创建时:勾选web后不要勾选spring web。
创建后:resources下没有static、templates等静态资源文件夹,且pom文件在的web工程起步依赖变成了非web工程起步依赖。

2、获取容器内对象
因为没有web工程的依赖,那么如何获取通过@Service、@Component等注解加入Spring容器的对象?
有两种方式,见以下示例:

第一种方式:
@SpringBootApplication
public class SpringbootJavaApplication {

    public static void main(String[] args) {
        /**
         * 入口类启动后返回一个ConfigurableApplicationContext对象,该对象也是spring的容器
         * 可以通过该对象的getBean("对象所属类名首字母小写")来获取
         * 通过@Service、@Component等注解spring容器对象。        
         */
        ConfigurableApplicationContext cac= SpringApplication.run(SpringbootJavaApplication.class, args);
        StudentServiceImpl service=(StudentServiceImpl) cac.getBean("studentServiceImpl");
        System.out.println(service.welcomeSpringbootJava("welcome to springboot java application!"));

        Student student=(Student) cac.getBean("student");
        student.setSname("张三");
        System.out.println(student.getSname());
    }
}



第二种方式:
@SpringBootApplication
public class SpringbootJava2Application implements CommandLineRunner { //第一步,实现CommandLineRunner接口
 
    //第二步,在注入对象上加入@Autowired注解
    @Autowired
    private StudentService service;
    @Autowired
    private Student student;

    public static void main(String[] args) {
        SpringApplication.run(SpringbootJava2Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception { //重写run方法
        System.out.println(service.welcomeSpringbootJava("welcome to springboot java application!"));

        student.setSname("张三");
        System.out.println(student.getSname());
    }
}



3、其实springboot创建非web应用没什么软用,不如直接创建maven java工程呢。
    所以这一部分仅作了解即可。

十五、springboot使用servlet

第一步:
    自定义servlet用@WebServlet标注,实现HttpServlet接口,在doGet或doPost方法中实现servlet逻辑。

第二步(有两种实现方式):
    第一种:
        入口类用@ServletComponentScan标注。
    第二种:
        自定义配置类,在配置类中配置自定义好的servlet。


注意:
    用得不多,用到再百度即可。

 

你可能感兴趣的:(Java,SpringBoot)