SpringBoot

本文介绍了Spring的历史版本,从1.X到3.x/4.x,重点讲述了Spring的JavaConfig特性,包括@Configuration注解的使用。接着深入探讨了SpringBoot,它的出现为了解决Spring的配置繁琐问题,提供开箱即用的体验。SpringBoot内部集成了多种框架,并内嵌Tomcat,简化了开发和部署流程。文章通过实例展示了如何使用JavaConfig创建对象和读取外部文件,以及SpringBoot的入门案例和接收参数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三、Spring的JavaConfig

3.1、Spring的版本

spring是一个社区

3.1.1、Spring1.X版本

     该版本是Spring的第一个版本,只支持XML文件配置,不能使用注解,使用起来是有点复杂的

3.1.2、Spring2.x版本

     该版本与JDK1.5发布的时间非常接近,JDK1.5支持注解(如:@Override),同时spring2.x也引入了注解的支持,这个时候spring就可以使用xml和注解

3.1.3、spring3.x/4.x版本

     引入java配置的方式,就是说使用java类替代xml文件。我们就可以完全脱离xml文件,避免看了开发人员在Java类与xml文件之间的频繁切换问题。而且SpringBoot推荐我们使用Java配置的方式来配置Spring

    现在Spring已经发展到了5.x版本。

3.2、JavaConfig

3.2.1、概述

     使用Java类替代原来的xml文件,主要使用      @Configuration注解

3.2.2、案例一

    需求:使用Java配置的方式创建对象

  1. 在pom文件中引入依赖
  2. 创建dao层
  3. 创建service层
  4. 创建测试类
  5. 创建Java配置类

第一步:创建项目

第二步:在pom文件中引入依赖

pom.xml:引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zhiyou</groupId>
    <artifactId>day3_21_javaconfig</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <slf4j.version>1.7.7</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
        <spring.version>4.3.7.RELEASE</spring.version>
    </properties>
    <dependencies>
        <!-- Spring依赖 -->
        <!-- 1.Spring核心依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 2.Spring dao依赖 -->
        <!-- spring-jdbc包括了一些如jdbcTemplate的工具类 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 3.Spring web依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--springMVC依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- 日志文件管理包 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
    </dependencies>

</project>

第三步:创建实体类

package pojo;

public class User {
    private  String name;
    private String  pass;

//getter和setter方法
//构造方法
//toString方法

}

第三步:创建dao层

package dao;

import pojo.User;

import java.util.ArrayList;
import java.util.List;

public class UserDao {

    //获取所有数据
    public List<User> queryAll(){
        List<User> users=new ArrayList<User>();
    
  //模拟连接数据库   (使用集合当做数据库)
        for (int i=0;i<10;i++){
            // 向集合中添加数据
            users.add(new User("name"+i,"pass"+i));
        }
        return users;
    }


}

第五步:写service层

package service;

import dao.UserDao;
import pojo.User;

import javax.annotation.Resource;
import java.util.List;

public class UserService {

    @Resource
    private UserDao ud;

    public List<User> queryAll(){
        return ud.queryAll();
    }


}

第六步:创建java测试类

注:
  @Configuration:  使用java类替代原先的XML文件。声明该类是一个配置类(如:可以在该类直接创建对象,不需要再去配置文件创建对象了)
  @Bean: 创建对象。 使用的是方法创建对象,方法名就是它在ioc中的标记,用的时候去ioc容器中给它取出来即可(getbean方法)

package conf;

import dao.UserDao;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import service.UserService;

/**
 *  该类的作用:使用java类替代原先的XML文件,(可以在该类直接创建对象,不需要再去配置文件创建对象了)
 *  实现方式:使用@Configuration注解        该注解是用来说明该类是一个配置类。
 *
 */
@Configuration
public class JavaConf {
    /**
     *   创建对象:使用@Bean注解
     *           使用的是方法来创建对象,方法的返回值是对象的类型,
     *           方法名就是对象在IOC容器中的name,相当于bean标签的name属性
     *  return对象即可
     */

    //service和dao层,一共是创建了2个对象
   @Bean
    public UserDao userDao(){
        return new UserDao();
    }

    @Bean
    public UserService userService(){
        return new UserService();
    }


}
第七步:创建测试类
package test;

import conf.JavaConf;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import pojo.User;
import service.UserService;

import java.util.List;

public class UserTest {
    public static void main(String[] args){
        //1.获取Java配置类
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConf.class);
        //2.获取IOC容器中的对象
        UserService us = (UserService) context.getBean("userService");//返回值是对象Object---强转为UserService类型
      
        //3.调用方法
        List<User> users = us.queryAll();
        for (User user:users) {
            System.out.println(user);
        }

    }

}

       查看结果:


 

3.2.3、案例二

         需求:在案例一的基础上读取外部文件

1)创建db.properties文件

2)读取

3)测试

4)总结

 

第一步:创建db.properties文件

        创建位置是;main-resources下,而不是main-java下

mysql_driver=com.mysql.jdbc.Driver
mysql_url=jdbc:mysql:///ssm  
mysql_user=root
mysql_pass=123

同时可以看见这里连接的数据库是jdbc(所以下边的创建对象是jdbc的写法,也可以使用成c3p0等)

第二步:读取外部文件

 1)  注:需要连接数据库,需要在pom.xml中引入mysql的依赖

      <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

2)去写配置类JavaConfig

注:

  @PropertySource: 读取外部文件,可以读取多个
 ignoreResourceNotFound:文件找不到是否继续执行,默认值是false,改成true生效

例:

     @Value:给变量赋值

package conf;

import dao.UserDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import service.UserService;

/**
 *  该类的作用:使用java类替代原先的XML文件,(可以在该类直接创建对象,不需要再去配置文件创建对象了)
 *  实现方式:使用@Configuration注解        该注解是用来说明该类是一个配置类。
 *
 */
@Configuration  //声明该类是配置类
@PropertySource(value = {"classpath:db.properties","classpath:aaa"},ignoreResourceNotFound = true)//读取外部文件
public class JavaConf {
    /**
     *   创建对象:使用@Bean注解
     *           使用的是方法来创建对象,方法的返回值是对象的类型,
     *           方法名就是对象在IOC容器中的name,相当于bean标签的name属性
     *  return对象即可
     */

    //声明变量保存driver
     @Value("${mysql_driver}")
    private String driver_class;
    @Value("${mysql_url}")
     private String url;
    @Value("${mysql_name}")
    private String user;
    @Value("mysql_pass")
    private String pass;
    //配置数据源
    @Bean
    public DriverManagerDataSource dataSource(){
        DriverManagerDataSource dataSource=new DriverManagerDataSource();
        //设置driver
        dataSource.setDriverClassName(driver_class);
        //设置url
        dataSource.setUrl(url);
        //设置username
        dataSource.setUsername(user);
        //设置password
        dataSource.setPassword(pass);

        return  dataSource;
    }


    //service和dao层,一共是创建了2个对象
   @Bean
    public UserDao userDao(){
        return new UserDao();
    }

    @Bean
    public UserService userService(){
        return new UserService();
    }


}

第三步 测试

查看结果:

 

四、SpringBoot

4.0、Spring体系

    大家已经学会Spring和SpringMVC了,那么Spring有多少东西呢?

     去官网看:https://spring.io

4.1、Spring历史遗留问题

     我们在使用Spring和SpringMVC开发项目时虽然已经很方便了,但是我们还是需要写很多的配置文件,而且这些配置每次的文件都类似。     比如我们只想实现一个邮件收发的系统,在做之前就需要大量的配置。就是这些大量的配置使得初学者产生恐惧。Spring框架的开发者同样发现了这些问题。所以SpringBoot就横空出世。

4.2、SpringBoot介绍

     SpringBoot其实并不是一个全新的框架,而是内部集成了很多的其他框架,并且做好了默认的配置,比如spring与mybatis的整合,spring与springmvc的整合,spring与redis的整合等等。使得开发者可以非常方便的开发,部署项目。

4.3、SpringBoot的优势

1)开箱即用,提高开发效率和部署效率

2)内部集成了很多框架的默认配置

3)内部内嵌一个tomcat,无需依赖外部的web容器

4.4、入门案例

    使用工具:IDEA、Eclipse均可

    我使用的是:idea

4.4.0、IDEA与eclipse区别

IDEA就是一辆跑车,eclipse就是一辆拖拉机

Eclipse是基于工作空间的,创建项目时创建project

IDEA是基于Project,创建项目创建module,更方便分模块开发

4.4.1、设置IDEA使用的maven插件

一些普通设置

4.4.2、案例一:

   需求:在页面上显示helloworld

第一步:创建maven项目

第二步  配置pom文件

       导入springmvc的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<!--继承的项目-->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<!--本项目的信息-->
	
	<groupId>com.zhiyou</groupId>
	<artifactId>day3_21_springboot</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>day3_21_springboot</name>
	<description>Demo project for Spring Boot</description>
	<!--定义版本-->
	<properties>
		<!--JDK版本-->
		<java.version>1.8</java.version>
	</properties>
	<!--相关依赖-->
	<dependencies>
		<!--springboot相关依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<!--springboot测试依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--springmvc依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<!--配置maven插件-->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

 

第三步 直接创建Controller写方法即可

package com.zhiyou.day3_21_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 Day321SpringbootApplication {

	public static void main(String[] args) {

		SpringApplication.run(Day321SpringbootApplication.class, args);
	}

	@RequestMapping("hello.do")
	@ResponseBody
	public String hello(){
		return "hello";
	}

}

查看结果:

可以看见中页面中显示hello内容了

4.5、接收参数

4.5.1、接收单个参数

第一步:写实体类

第二步:写控制层

    @RestController    该注解是一个组合注解,是Controller和ResponseBody的组合
package com.zhiyou100.controller;

import org.springframework.web.bind.annotation.RestController;
/*@Controller
@ResponseBody*/
@RestController   //该注解是一个组合注解,是Controller和ResponseBody的组合
public class TestController {

    //接收一个参数
    public String getAlone(Integer id){
        return "id=="+id;
    }

}

第三步:在主类中开启包扫描

查看:

4.5.2、接收一个对象

package com.zhiyou100.controller;

import com.zhiyou100.pojo.Goods;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/*@Controller
@ResponseBody*/
@RestController   //该注解是一个组合注解,是Controller和ResponseBody的组合
public class TestController {

    //接收一个参数
    @RequestMapping("get1.do")
    public String getAlone(Integer id){
        return "id=="+id;
    }

    //接受一个对象
    @RequestMapping("get2.do")
    public  String getObject(Goods goods){
        return "goods===="+goods;
    }
}

同时参考上一个接收一个参数的操作

结果:

4.6、响应

4.6.1、请求转发

使用forward

    需求:请求转发到action

创建页面:

写控制层

package com.zhiyou100.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller  //注意:这是要跳转页面,可就不能使用@RestController了
public class TestController2 {
   
    @RequestMapping("method1.do")
    public String method1(ModelAndView model){
        //设置要返回的页面(请求转发到页面)
        //model.setViewName("hello.html");  //这样写的话,有参数,有返回值,返回值为ModelAndView
        //return model;

        return "hello.html";   //这样写的话,不需要参数,返回值类型为String 
    }
 
//请求转发到方法
    @RequestMapping("method2.do")
    public String method2(){
        //默认是请求转发,但是如果要转发到另一个action中,则需要使用forward指明
        return "forward:method1.do";
    }




}

 

结果:

4.6.2、重定向

使用redirect

package com.zhiyou100.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller  //注意:这是要跳转页面,可就不能使用@RestController了
public class TestController2 {
    //重定向到页面
    @RequestMapping("method3.do")
    public String method3(){
        return "redirect:http://www.zhiyou100.com";
    }

     //重定向到方法
    @RequestMapping("method4.do")
    public  String method4(){
        return "redirect:method3.do";
    }

}

结果:

4.7、SpringBoot静态资源

4.7.1、位置

  SpringBooot的静态资源都存放到resources下的static、public包下比如图片,js,html,css

4.7.2、访问静态资源

在resources下创建public目录存放一张图片访问,在浏览器上输入http://localhost:8080/3.jpg,如果能访问到说明成功。

 

五、SpringBoot细节

5.1、主类

      @SpringBootApplication:该注解是一个组合注解(主类中的注解),有@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan、@Filter等

    @SpringBootConfiguration:是一个组合注解,由@Configuration等,说明该注解所描述的类是一个xml文件。

   @EnableAutoConfiguration:使用自动配置,就是说使用springboot框架自动继承其他框架的配置。 如果不想用默认的配置使用excludeName属性或者exclude属性。

   @ComponentScan:设置扫描包,默认扫描同包和子包

    @Filter:定义过滤器

5.2、实现原理

   SpringBoot的实现是由启动器和自动配置以及大量的注解。

5.3、自动配置

   SpringBoot不是一个全新框架,而是其中内部继承其他的框架并做了一些默认配置,这就是自动配置。

5.4、启动器

    启动器是我们在pom文件中引入的依赖,比如spring-boot-starter-web,引入之后,maven就会自动去加载相关的jar包依赖。Springboot就认为我们需要使用到这些技术。就会自动加载默认的配置。

常用的启动器有哪些?

spring-boot-starter-web:开发web网站内部集成springmvc和tomcat等

spring-boot-starter-jdbc:连接数据库

spring-boot-starter-thymeleaf:模板引擎,用来显示数据。

spring-boot-starter-mysql:集成mysql

六 任务

6.1、掌握JavaConfig

6.2、掌握SpringBoot基本配置和常用的注解,所有的配置都要清楚

6.3、熟练使用SpringBoot接收请求做出响应,访问静态资源

6.4、理解SpringBoot的原理

6.5、使用JavaConfig连接mysql数据库完成一个查询操作在页面上显示。(提示:可以使用Spring自带的数据库访问技术也可以使mybatis都行)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值