您的位置:首页 > 健康 > 美食 > Java学习笔记整理: 关于SpringBoot 2024/7/12;

Java学习笔记整理: 关于SpringBoot 2024/7/12;

2025/1/8 18:38:04 来源:https://blog.csdn.net/gzx233/article/details/140369886  浏览:    关键词:Java学习笔记整理: 关于SpringBoot 2024/7/12;

SpringBoot

springboot也是spring公司开发的一款框架。为了简化spring项目的初始化搭建的。

特点specialty:

springboot的特点:

1) 自动配置

Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。

2) 起步依赖

起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。

简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

3) 辅助功能

提供了一些大型项目中常见的非功能性特性,如嵌入式服务器tomcat、安全、指标,健康检测、外部配置等。

创建Create:

搭建springboot的项目
  1. 新建>选择Spring Boot|Spring Initializr

  2. SpringBoot版本3.0以上使用java17>选择Web中SpringWeb包(剩下的看需求)

  3. Java8配置------------------------------------
    <?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 https://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><!--springboot3.0以上必须使用jdk17--><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ykq</groupId><artifactId>qy174-demo01</artifactId><version>0.0.1-SNAPSHOT</version><name>qy174-demo01</name><description>qy174-demo01</description>
    ​<properties><!--java使用版本--><java.version>8</java.version></properties><dependencies><!--web依赖jar--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
    ​<!--单元测试jar--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
    <!--如果下方出现红色可以删除--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
​
</project>
```

环境|文件配置:

关于SpringBoot的配置文件和框架使用

常用的配置文件种类:

springboot提供了两种配置文件。不管是哪种他们的前缀都是application

第一种application.properties

第二种:application.yml | application.yaml

如果两个文件同时存在,properties优先级更高。

#.yml | .yaml文件写入格式(":"后务必跟空格然后再写入值,字符串无须+"")
#key: 
#   value: hhh
#   key2: value 
server:port: 8088servlet:context-path: /bbb
#properties写入格式(字符串无须+"")
#key=value
#key.key2=value
server.port=8080
server.servlet.context-path=/aaa

*包扫描的原理

ssm项目必须加包扫描。而现在springboot没有在写包扫描了。自带了包扫描的功能。核心在主类上@SpringBootApplication上,它是一个复合注解。里面包含:

@EnableAutoConfiguration开启自动配置,里面包含:

@AutoConfigurationPackage,

@Import({AutoConfigurationPackages.Registrar.class})

需要导入一个自动配置包的类。加载主类所在的包,并按照该包进行扫描。

@SpringBootApplication
​
@ComponentScan(basePackages = {"com.gzx.demo1.config","com.gzx.demo1.controller"})
//不写该注释默认扫描该文件所在的包,加上该注释指定扫描的包,默认扫描消失;
​
public class Demo1Application {
​public static void main(String[] args) {SpringApplication.run(Demo1Application.class, args);}
​
}

自动装配原理:

我们原来ssm项目,都需要加载前端控制器DispatcherServlet. 而现在的springboot并没有加载DispatcherServletspringboot具备自动装配的功能。

127个自动装配

springboot启动时,加载了使用@SpringbootApplication注解的类,该注解是一个符合注解,包含@EnableAutoConfiguration该注解开启了自动装配功能,该注解也是一个符合注解里面包含@Import({AutoConfigurationImportSelector.class}),导入AutoConfigurationImportSelector该类自动装配选择器类,该类会自动加载很多自动装配。每个自动装配会完成对于的自动装配功能

protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata){if(!this.isEnabled(annotationMetadata)){return EMPTY_ENTRY;} eles {AnnotationAttrbutes attributes = this. getAttributes(annotationMetadata);//获取所有的自动装配类List<String> configurations = this.getCandidateConfigurations(annotationMetadata,attrbutes);//移除重复的自动装配类configurations= this.removeDuplicates(configurations);
​Set<String> exclusions = this.getExclusions(annotationMetadata,attributes);
​this.checkExcludedClasses(configurations,exclusions);//移除排除的自动配置类configurations.removeAll(exclusions);//过滤掉没有使用的starter自动配置configurations = this.getConfigurationClassFilter().filter(configurations);
​this.fireAutoConfigurationImporEvents(configurations,exclusions);
​return new AutoConfigurationEntry(configurations,exclusion);}
}

*读取配置文件中的内容

我们习惯把一些自己的信息放入配置文件中,便于修改。比如OSS. 支付。 我们还希望通过java代码能够读取到配置文件中自己的信息。

springboot提供了两种方式用于读取springboot配置文件中信息的方式。

第一种: @ConfigurationProperties
使用在类上 @ConfigurationProperties(prefix="前缀")
#配置文件
users.name=hhh
users.age=123
users.hobby=swim,basketball
@ConfigurationProperties(prefix = "users")//定义读取属性名
@Component//该类的创建spring,而且创建时自动读取配置文件为users的属性
@Data
public class User {private String name;private int age;private List<String> hobby;
}
第二种: @Value
使用在变量上 @Value("${类名.变量名}")(只能读取基本类型和字符串类型)
@RestController
public class TestController {//将属性文件中变量给予注释变量@Value("${users.name}")private String name;
​//访问地址@GetMapping("/user")public String test(){System.out.println(name);return name;}
}

*profile多环境配置

自理解:

通过不同的配置文件切换spring配置,再主配置文件中进行便捷切换;

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。

  1. profile配置文件

    多profile文件方式,yml多文档方式

  2. profile激活方式

    配置文件|命令行参数

常用命名方式:

application-(命名).properties [自定义的配置文件]

相同配置依然还是放在application.properties中

application-dev.properties [开发环境的配置文件] application-test.properties [测试环境的配置文件] application-pro.properties [生产环境的配置文件]

激活对应配置文件:

第一种:配置文件内

#激活对应环境的配置文件spring.profiles.active="命名"
spring.profiles.active=dev

第二种:命令行使用

java –jar xxx.jar --spring.profiles.active=dev

注册web组件|过滤器

自理解

将ssm的xml配置文件改为类中声明使用

web组件表示的就是servlet,filter组件。

  1. 创建一个Servlet
    public class MyServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("经过MyServlet");}
    }
    ​
    public class MyFilter implements javax.servlet.Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("经过DoFilter");}
    }

  1. 创建一个配置类
    @Configuration //表示该类为配置类,等价于之前的xml配置文件
    public class MyConfig {
    ​@Bean //等价于<bean标签.public ServletRegistrationBean  myServlet(){ServletRegistrationBean bean=new ServletRegistrationBean();bean.setServlet(new MyServlet());bean.setName("my");bean.setLoadOnStartup(1);bean.addUrlMappings("/my");return bean;}
    ​@Beanpublic FilterRegistrationBean myFilter() {FilterRegistrationBean bean = new FilterRegistrationBean();bean.setFilter(new MyFilter());bean.setName("filter");bean.addUrlPatterns("/*");return bean;}
    }

整合第三方框架:

整合mybatis
引入依赖
<dependencies>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql的驱动依赖 3.-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
​
<!--mybatis和springboot整合的jar.-->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency>
​
​
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
</dependencies>
​
配置文件
spring.application.name=qy174-springboot-mybatis
​
#数据源的信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/qy174-springboot?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
​
​
#配置mybatis映射文件的路径
mybatis.mapper-locations=classpath:mapper/*.xml
实体类
@Data
public class User {
private Integer userid;
private String username;
private String sex;
private Integer age;
}
dao
public interface UserDao {
int insert(User user);
int delete(Integer id);
int update(User user);
User select(Integer id);
List<User> selectAll();
}
映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ykq.dao.UserDao">
​
<insert id="insert">insert into user(username,age,sex) values(#{username},#{age},#{sex})
</insert>
<update id="update">update user set username=#{username},age=#{age},sex=#{sex} where userid=#{userid}
</update>
<delete id="delete">delete from user where userid=#{id}
</delete>
<select id="selectById" resultType="com.ykq.entity.User">select * from user where userid=#{id}
</select>
<select id="selectAll" resultType="com.ykq.entity.User">select * from user
</select>
​
</mapper>
service
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public R selectAll() {List<User> users = userDao.selectAll();return new R(200,"查询成功",users);
}
​
@Override
public R selectById(Integer id) {User user = userDao.selectById(id);if(user==null){return new R(500,"查询失败",null);}else{return new R(200,"查询成功",user);}
}
​
@Override
public R insert(User user) {int i = userDao.insert(user);if(i>0){return new R(200,"添加成功",null);}return new R(500,"添加失败",null);
}
​
@Override
public R update(User user) {int update = userDao.update(user);if (update>0){return new R(200,"修改成功",null);}return new R(500,"修改失败",null);
}
​
@Override
public R delete(Integer id) {int i = userDao.delete(id);if (i>0){return new R(200,"删除成功",null);}return new R(500,"删除失败",null);
}
}
​
controller
@RestController
@RequestMapping("/user")
public class UserController {
​
@Autowired
private UserService userService;
@GetMapping("/list")
public R list() {return userService.selectAll();
}
​
//getById/1
@GetMapping("/getById")
public R getById(Integer id) {return userService.selectById(id);
}
​
@DeleteMapping("/deleteById")
public R deleteById(Integer id) {return userService.delete(id);
}
​
@PostMapping("/insert")
public R insert(@RequestBody User user) {return userService.insert(user);
}
​
@PutMapping("/update")
public R update(@RequestBody User user) {return userService.update(user);
}
}
​
问题集:
没有为dao生成代理实现类

方法1:

@SpringBootApplication
​
//使用该注释为dao包类内的mapper类生成代理实现类
@MapperScan(basePackages = {"com.gzx.dao"})
​
public class Demo1Application {
​public static void main(String[] args) {SpringApplication.run(Demo1Application.class, args);}
​
}

方法2:

//在需要生成的mapper类代理实现类中写该注释
@Mapping
NoClassDefFoundError: 导包异常

java,lang.NoClassDefFoundError:org/springframework/aot/AoDetecor

mybatis和springboot整合的版本太高。

DispatcherServletAutoConfiguration类:

//创建Servlet注册器-[DispatchServlet以及路径]
DispatcherServletRegistrationBean registration = new DispatcherServletRegistrationBean(dispatcherServlet,webMvcPrpert...)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com