2026/5/20 3:26:27
网站建设
项目流程
东莞网站建设优化方案,如何做网站logo 设置平滑,绵阳网站关键词,比较火的小程序购物平台POM文件中为何要以继承的方式引入SpringBoot#xff1f;
继承父工程的优势
依赖管理#xff1a;在父工程中定义依赖的版本#xff0c;子模块直接引用而不必指定版本号插件管理#xff1a;在父工程中配置插件#xff0c;子模块直接使用属性设置#xff1a;在父工程中定义一…POM文件中为何要以继承的方式引入SpringBoot继承父工程的优势依赖管理在父工程中定义依赖的版本子模块直接引用而不必指定版本号插件管理在父工程中配置插件子模块直接使用属性设置在父工程中定义一些通用属性如项目编码、java版本等统一配置可以统一多个子模块的构建配置确保一致性。继承了父工程那么引入依赖的时候不需要指定版本号因为在父工程中各种依赖的版本号已经预设好了。SpringBoot核心注解SpringBootApplication被此标注表示该类是SpringBoot项目的入口类。此注解被以下三个注解标注说明SpringBootApplication同时有以下三个注解的功能SpringBootConfiguration EnableAutoConfiguration ComponentScanSpringBootConfigurationSpringBootConfiguration被Configuration标注说明项目的主入口类同时是一个配置类因此在主入口类中使用Bean注解方法的话该方法返回值对象会被纳入Ioc容器管理。EnableAutoConfiguration启用自动配置SpringBoot默认情况下启用自动配置。自动配置有什么用自动配置只要启动SpringBoot就会去类路径中查找Class。根据类路径中有某些类来自动管理Bean不需要程序员手动配置。比如SpringBoot检测到SqlSessionFactory,或者在application.properties中配置了数据源SpringBoot会认为项目中含有MyBatis框架会将MyBatis相关的Bean初始化然后放到Ioc容器中管理起来。ComponentScanComponentScan负责组件扫描。会扫描此包及此包下所有子包或子包的子包等的路径。外部化配置外部化配置是指将配置信息存储 在应用程序代码之外的地方。这样配置信息独立于 代码进行管理。方便配置修改。修改后不需要重新编译也不需要重新部署。springboot默认先找外部化配置Application.properitesApplication.properites配置文件是SpringBoot默认的额配置文件Application.properites不是必须的SpringBoot提供了默认配置如果需要修改默认配置就在Application.properites中进行配置。Application.properites可以放在类路径中也可以放在项目之外因此成为外部化配置SpringBoot在启动时会从以下位置按顺序加载Application.properitesfile:./config/: 首先在SpringBoot当前工作目录下的config文件夹中查找如果没找到Application.properites会继续查找Application.yml2个都没找到才会进入下一个位置查找以此类推file:./: 这里找不到会继续查找下一个位置classpath:/config/:classpath:/如果在多个位置有相同属性的定义那么最先检查的位置中的属性值先使用。如果要指定配置文件位置可以通过--spring.config.location进行指定比如/* by 01130.hk - online tools website : 01130.hk/zh/calculator.html */ java -jar xxxx.jar --spring.config.locationfile:///E:\a\b\application.properties注意以上的--spring.config.locationfile:///E:\a\b\application.properties属于命令行参数会被传递到main方法的String[] args参数上。读取配置/* by 01130.hk - online tools website : 01130.hk/zh/calculator.html */ // 读取配置文件中myapp.path的值 // 如果这个key不存在并且没有指定默认值那么会报错 // ${myapp.path:50}指定myapp.path的默认值是50 Value(${myapp.path:50}) private String appPath;YAML语法规则数据结构支持多种数据结构包括字符串、数字、布尔值、数组、List集合、Map键值对等yaml使用一个空格来分割属性名和属性值比如name: jackyaml使用换行空格表示层级关系注意不能使用tab 必须是空格空格数量无要求建议2个或4个比如myapp: name: mall同级元素左侧对其大小写敏感使用# 进行注释在一个映射中键必须唯一普通文本可以使用单引号也可以使用双引号也可以什么都不用单引号中的\n表示普通文本双引号中的\n表示换行保留文本原格式使用 | 比如username: | aaaa bbb ccc文档切割 --- 这个符号下面的配置认为是一个独立的yaml文件便于大文件的阅读。配置文件合并#properties文件合并 # 对于数组来说使用逗号进行分隔开 spring.config.importclasspath:/application-mysql.properties,classpath:/application-redis.propertiesyml文件合并的第一种写法spring: config: import: [classpath:/application-mysql.yml,classpath:/application-redis.yml]yml文件合并的第二种写法spring: config: import: - classpath:/application-mysql.yml - classpath:/application-redis.yml多环境切换开发环境配置文件application-dev.properties测试环境配置文件application-test.properties预生产环境配置文件application-preprod.properties生产环境配置文件application-prod.properties如果启用生产环境配置可以有以下两种操作方式在application.properties添加配置spring.profiles.activeprod在命令行参数上添加 --spring.profiles.activeprod将配置绑定到简单Beanpackage com.ali.bindtobean.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; // 纳入Ioc容器 Component // 将配置文件一次性绑定到Bean对象上 ConfigurationProperties(prefix myapp) public class AppConfig { // 要实现一次性绑定配置文件中的属性名 必须和Bean对象的属性名要一致 // 底层在给对象属性赋值时调用了setter方法因此每个属性必须有setter方法 private String name; private Integer age; private String password; private Boolean gender; 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; } public String getPassword() { return password; } public void setPassword(String password) { this.password password; } public Boolean getGender() { return gender; } public void setGender(Boolean gender) { this.gender gender; } Override public String toString(){ return AppConfig [name name , age age , gender gender ]; } }spring.application.namebindtobean myapp.namejack myapp.age12 myapp.password123 myapp.gendertrue绑定嵌套Bean在一个Bean的属性中有一个其他Bean类型。这样就是嵌套Bean。package com.ali.bindtobean.bean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; Component ConfigurationProperties(prefix app.xyz) public class User { private String name; private Address address; public Address getAddress() { return address; } public void setAddress(Address address) { this.address address; } public String getName() { return name; } public void setName(String name) { this.name name; } Override public String toString() { return User [name name , address address.toString() ]; } }package com.ali.bindtobean.bean; public class Address { private String city; private String street; public String getCity() { return city; } public void setCity(String city) { this.city city; } public String getStreet() { return street; } public void setStreet(String street) { this.street street; } Override public String toString() { return Address [city city , street street ]; } }app.xyz.namelucy app.xyz.address.cityxj app.xyz.address.streetdayang其他方式绑定Bean// 在主入口程序添加以下注解启用将配置信息绑定到User这个Bean EnableConfigurationProperties({User.class, Address.class})另一种方式// 在主入口程序添加以下注解扫面指定包。将配置信息绑定到这个包下的类 ConfigurationPropertiesScan(basePackages com.ali.bindtobean.bean)复杂的属性结构绑定Bean绑定数组、集合、Map到Beanapp2.abc.names[0]jack app2.abc.names[1]lucy app2.abc.names[2]tom app2.abc.addresses[0].citybj app2.abc.addresses[0].streetchaoyang app2.abc.addresses[1].citytj app2.abc.addresses[1].streetnankai app2.abc.addressList[0].citybj_list app2.abc.addressList[0].streetchaoyang_list app2.abc.addressList[1].citytj_list app2.abc.addressList[1].streetnankai_list # addr1 和addr2 都是key app2.abc.addressMap.addr1.citybj_map app2.abc.addressMap.addr1.streetchaoyang_map app2.abc.addressMap.addr2.citytj_map app2.abc.addressMap.addr2.streetnankai_mapyaml文件配置方式如下app2: abc: names: - tom - smith addresses: - city: beijing street: chaoyang - city: tianjin street: nankai # addressList 可以写成 address-list addressList: - city: beijing street: chaoyang - city: tianjin street: nankai addressMap: addr1: city: beijing street: chaoyang addr2: city: tianjin street: nankaipackage com.ali.bindtobean.bean; import org.springframework.boot.context.properties.ConfigurationProperties; import java.util.Map; ConfigurationProperties(prefix app2.abc) public class AppBean { // 数组中元素是简单类型 private String[] names; // 数组中元素是Bean private Address[] addresses; //List集合。List中元素是Bean private ListAddress addressList; //Map集合 StringBean private MapString,Address addressMap; public void setNames(String[] names) { this.names names; } public void setAddresses(Address[] addresses) { this.addresses addresses; } public void setAddressList(ListAddress addressList) { this.addressList addressList; } public void setAddressMap(MapString, Address addressMap) { this.addressMap addressMap; } Override public String toString() { return ; } }将配置绑定到第三方对象other: abc: city: beijing street: daxingpackage com.ali.bindtobean.config; import com.ali.bindtobean.bean.Address; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; Configuration public class AppConfig2 { // address 是第三方类使用以下方式完成配置到属性的绑定 Bean ConfigurationProperties(prefix other.abc) public Address address() { return new Address(); } }指定配置数据来源Component ConfigurationProperties(prefix app2.abc) // 指定配置数据来自/a/b/group-info.properties路径的配置文件 PropertySource(classpath:/a/b/group-info.properties) public class AppBean { ... }ImportResource注解当SpringBoot项目中出现ApplicationContext.xml文件。并且文件中配置了Bean。要把这个Bean注入到容器中。package com.ali.bindtobean.bean; public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } Override public String toString() { return super.toString(); } }配置文件如下?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd bean idperson classcom.ali.bindtobean.bean.Person property namename valuejack/ property nameage value20/ /bean /beans// 在主入口程序添加以下注解让applocationContext.xml文件生效 ImportResource(classpath:/applocationContext.xml)Environmentspring提供的一个接口。SpringBoot启动的时候会把环境、系统信息封装到Environment对象中需要获取这些信息可使用Environment接口的方法。Environment对象主要包括当前激活的配置文件 active-profiles系统属性如系统名字 、java版本环境变量应用程序启动时传给主方法的命令行参数Autowired private Environment environment; public void doSomething() { // 获取当前激活的配置文件 String[] activeProfiles environment.getActiveProfiles(); for (String activeProfile : activeProfiles) { System.out.println(activeProfile); } // 获取配置信息 String property environment.getProperty(app.xyz.address.city); System.out.println(property); }SpringBoot aop实现添加依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-aop/artifactId version3.3.5/version /dependency编写切面类package com.ali.springaop.component; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.LoggerFactory; import org.slf4j.Logger; import org.springframework.stereotype.Component; import java.util.Arrays; // 指定切面类 Aspect Component public class LoggingAspect { private static final Logger logger LoggerFactory.getLogger(LoggingAspect.class); // 定义切入点匹配所有以“service”结尾的包下的所有方法 Pointcut(execution(* com.ali.springaop.service..*(..))) public void ServiceMethods(){ } // 前置通知切入点的方法执行前执行此代码 Before(ServiceMethods()) public void before(JoinPoint joinPoint) { String methodName joinPoint.getSignature().getName(); Object[] args joinPoint.getArgs(); logger.info(Method [{}] with parameters [{}] is called, methodName, Arrays.toString(args)); } }本文来自博客园作者NE_STOP转载请注明原文链接https://www.cnblogs.com/alineverstop/p/19506048