java 开发学习总结

一,注解
@Bean是一个注解,用于告诉 Spring 框架将标注的方法返回的对象注册为一个 Bean。
@Bean注解的方法名作为对象的名字。
@Bean 一般和 @Component或者@Configuration 一起使用。
@Component 注解的类中不能定义类内部依赖的@Bean注解的方法。@Configuration可以。
@Configuration
public class AppConfig {
@Bean
public Foo foo() {
return new Foo(bar());
}
@Bean
public Bar bar() {
return new Bar();
}
}
@Bean + @Configuration ,在调用@Bean注解的方法时返回的实例bean是从IOC容器获取的,已经注入的,且是单例的,而不是新创建的。
@Bean + @Component,虽然@Bean注解的方法返回的实例已经注入到SpringIOC容器中,但是每次调用@Bean注解的方法时,都会创建新的对象实例bean返回,并不会从IOC容器中获取。

二,
① 所有 官方发布 的 Starter 都遵循以下命名模式: spring-boot-starter-* :譬如 spring-boot-starter-jdbc
② 任何 第三方提供 的 Starter 都遵循以下命名模式: *-spring-boot-starter :譬如 mybatis-spring-boot-starter

三, Gradle
① Maven Helper 插件( Plugins)可以查看依赖关系
② MyBatisX 查看 mapper 与 xml 的映射
③ Gradle Version:<4.1 使用 compile,Gradle Version:>=4.1 拆分为 implementation 和 api ,compile和api会进行依赖传递,implementation不会进行传递依赖

四,java.lang
java.lang包是Java语言的核心类库(lang是language的缩写),包括了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。

五,schema

mysql中的schema:
数据库(database)包含模式(schema),模式包含表,索引等。
在mysql的实现中,数据库等价于模式,schema(模式)就是database(数据库)的代名词。比如:
使用show databases; 和show schemas 得到的结果是一致的。
create database; 和create schema;效果是一致的。


oracle中的schema:
创建一个用户的同时为这个用户创建一个与用户名同名的scheme,并把她作为该用户的缺省shcema。这也就是我们在企业管理器的方案下看到schema名都为数据库用户名的原因。
Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决(Oracle中虽然有create schema语句,但是它并不是用来创建一个schema的),
schema的个数同user的个数相同,而且schema名字同user名字一一对应并且相同,所有我们可以称schema为user的别名,虽然这样说并不准确,但是更容易理解一些。

六,@Autowired @Resource 的区别

① @Autowired @Resource 来源不同
package javax.annotation; @Resource
package org.springframework.beans.factory.annotation; @Autowired

② 查找实例不同
@Autowired 先根据类型(byType)查找,如果存在多个(Bean)再根据名称(byName)进行查找;
@Resource 先根据名称(byName)查找,如果(根据名称)查找不到,再根据类型(byType)进行查找。

③ 支持参数不同
@Autowired 只支持设置一个 required 的参数,而 @Resource 支持 7 个参数

④ 对依赖注入的方式不同
@Autowired 支持属性注入、构造方法注入和 Setter 注入,而 @Resource 只支持属性注入和 Setter 注入

⑤ 编译器的提示不同
当使用 IDEA 专业版在编写依赖注入的代码时,如果注入的是 Mapper 对象,那么使用 @Autowired 编译器会提示报错信息。 Could not autowire. No beans of 'SysTenantMapper' type found. 虽然 IDEA 会出现报错信息,但程序是可以正常执行的。 然后,我们再将依赖注入的注解更改为 @Resource 就不会出现报错信息了

七,java包介绍

@Configuration 与 @ConfigurationProperties 区别:
1,来自的包不同
Configuration 来自 org.springframework.context.annotation;
ConfigurationProperties 来自 org.springframework.boot.context.properties;
@Configuation等价于<Beans></Beans>
@Bean等价于<Bean></Bean>


java 包的介绍:
javax是Java编程语言提供的标准扩展库,提供了各种各样的接口和类,用于实现不同领域的功能。它是Java标准库(java.lang, java.util, java.io等)的扩展,使得开发者能够更方便地开发各种类型的应用程序。
javax包括了多个子包,每个子包都提供了特定领域的功能。常用的子包有:
javax.swing:提供了创建图形用户界面(GUI)的类和接口。
javax.servlet:用于开发Java Web应用程序的Servlet API。
javax.xml.bind:用于将Java对象与XML文档之间进行转换的API。

使用示例:
import java.lang.*; java包是Java API标准的包。
import javax.servlet.http.*; javax是扩展包。

八,无状态bean, 有状态bean 的线程案例

Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。
ThreadLocal,连接ThreadLocalMap和Thread,来处理Thread的TheadLocalMap属性。

无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用。
有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”。
有状态的bean都使用Prototype作用域,而对无状态的bean则应该使用singleton作用域。
默认情况下,从bean工厂所取得的实例为Singleton(无状态的), 若每次对bean的请求都会创建一个新的bean实例,刚用Prototype(有状态的)。

例:
RequestContextHolder 所持有的请求上下文信息是有状态的。这意味着每个请求线程会有其自己的上下文信息,并且这些信息只对当前线程可见。
RequestContextHolder 是一个线程安全的工具类,它通过使用 InheritableThreadLocal 来保证同一个请求在不同线程中的上下文信息是一致的。

扩展:
InheritableThreadLocal的思路是在创建的时候进行拷贝ThreadLocalMap。
TransmittableThreadLocal的思路则是在运行前(run()之前拷贝ThreadLocalMap)

九,Mybatis,Mybatis-plus,Mybatis-mate,Mybatis-felx

mybatis 相关:

多租户忽略表的注解:@InterceptorIgnore(tenantLine = "1")

https://baomidou.com/pages/223848/#fieldfill
https://mybatis-flex.com/zh/intro/maven.html

十,@ComponentScan 扫描

@ComponentScan用于类或接口上主要是指定扫描路径,spring会把指定路径下带有指定注解的类自动装配到bean容器里。会被自动装配的注解包括@Controller、@Service、@Component、@Repository等等。与ComponentScan注解相对应的XML配置就是<context:component-scan/>, 根据指定的配置自动扫描package,将符合条件的组件加入到IOC容器中;

@ComponentScan有如下常用属性:

basePackages和value:指定要扫描的路径(package),如果为空则以@ComponentScan注解的类所在的包为基本的扫描路径。
basePackageClasses:指定具体扫描的类。
includeFilters:指定满足Filter条件的类。
excludeFilters:指定排除Filter条件的类。
useDefaultFilters=true/false:指定是否需要使用Spring默认的扫描规则:被@Component, @Repository, @Service, @Controller或者已经声明过@Component自定义注解标记的组件;


1. 扫描指定类文件
@ComponentScan(basePackageClasses = Person.class)
2. 扫描指定包,使用默认扫描规则,即被@Component, @Repository, @Service, @Controller或者已经声明过@Component自定义注解标记的组件;
@ComponentScan(value = "com.example")
3. 扫描指定包,加载被@Component注解标记的组件和默认规则的扫描(因为useDefaultFilters默认为true)
@ComponentScan(value = "com.example", includeFilters = { @Filter(type = FilterType.ANNOTATION, value = Component.class) })
4. 扫描指定包,只加载Person类型的组件
@ComponentScan(value = "com.example", includeFilters = { @Filter(type = FilterType.ASSIGNABLE_TYPE, value = Person.class) }, useDefaultFilters = false)
5. 扫描指定包,过滤掉被@Component标记的组件
@ComponentScan(value = "com.example", excludeFilters = { @Filter(type = FilterType.ANNOTATION, value = Component.class) })
6. 扫描指定包,自定义过滤规则
@ComponentScan(value = "com.example", includeFilters = { @Filter(type = FilterType.CUSTOM, value = MtyTypeFilter.class) }, useDefaultFilters = true)

@ComponentScans({
@ComponentScan("com.st.demo1"),
@ComponentScan("com.st")
})

结果分析:
basePackages.*:这种情况路径后缀会变成*/**/*.class,组件只会扫描路径包中的子包里面的类,而当前包中的Bean不会被扫描到。
basePackages.**: 这种情况路径后缀会变成**/**/*.class,组件会扫描当前包以及子包中的Bean.
basePackages:这种情况路径后缀会变成/**/*.class,组件会扫描当前包以及子包中的Bean.

十一, EMQX 共享订阅与广播订阅

以EMQX为例,配置共享订阅包括开启该功能,设置均衡策略,并在订阅时使用$share/前缀。发布和订阅的主题需遵循特定规则,确保消息正确路由。
共享订阅(集群消费)
广播订阅(结点消费)-> EMQX 默认的
注意:共享订阅是在订阅时设置topic的名字,延迟发布是在发布时设置topic的名字

十二,Spring Boot 应用程序启动执行代码

CommandLineRunner --启动完成后执行, 可以获取启动的命令行参数但不解析命令行,发生异常应用程序不能正常启动。
ApplicationRunner --启动完成后执行, 可以获取启动的命令行参数并解析命令行,发生异常应用程序不能正常启动。
ApplicationListener --启动完成后执行, 不能获取命令行。
@PostConstruct --启动过程中执行, 执行耗时长影响应用程序的启动。
InitializingBean --启动过程中执行, InitializingBean比使用 @PostConstruct 更安全,当依赖尚未自动注入的 @Autowired 字段,则 @PostConstruct 方法可能会遇到 NullPointerExceptions

十三,nginx 上传文件大小的配置(配置好了,需要重启nginx)

如果需要设置 client_max_body_size, client_body_buffer_size 的值,你可以在 Nginx 配置文件中的 http、server 或 location 块中添加这个指令,并指定你想要的缓冲区大小。
文件小于client_body_buffer_size直接在内存中高效存储。如果大于client_body_buffer_size小于client_max_body_size会存储临时文件,临时文件一定要有权限。
如果追求效率,就设置 client_max_body_size client_body_buffer_size相同的值,这样就不会存储临时文件,直接存储在内存了。
client_max_body_size 1024M;
client_body_buffer_size 64M;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ARM】MDK-ARM软件开发工具的最终用户许可协议获取

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解MDK-ARM系列产品内软件开发工具的最终用户许可协议的获取。 2、 问题场景 对于部分外企客户需要软件开发工具的最终用户许可协议作为产品资料&#xff0c;以便附录并说明。 3、软硬件环境 1&#xff09;、软件…

Shell编程之正则表达式与文本处理器2--sed

目录 一、sed 工具 1. 概述 2. sed 原理 3、常用操作选项 3.1 常用选项 3.2 操作命令 4. sed 的使用 5. 具体操作 5.1 打印输出 p 5.1.1 显示范围、单行、指定行输出、指定往后加几行输出 5.1.2 显示奇偶行 5.1.3 将指定内容的行打印出来 5.1.4 只输出行号…

ESP32和mDNS学习

目录 mDNS的作用mDNS涉及到的标准文件组播地址IPv4 多播地址IPv6 多播地址预先定义好的组播地址 mDNS调试工具例程mDNS如何开发和使用注册服务查询服务 mDNS的作用 mDNS 是一种组播 UDP 服务&#xff0c;用来提供本地网络服务和主机发现。 你要和设备通信&#xff0c;需要记住…

python通过omniORBpy调用CORBA

omniORB参考地址&#xff1a; omniORB omniORB - Browse Files at SourceForge.net omniORB - Browse /omniORBpy/omniORBpy-4.3.0 at SourceForge.net Windows 普通使用好像不需要安装omniorb。就对接北向接口业务需要使用python3.10的windows包&#xff0c;但目前好像没有…

【CI/CD】docker + Nginx自动化构建部署

CI/CD是什么 CI/CD 是持续集成&#xff08;Continuous Integration&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;或持续交付&#xff08;Continuous Delivery&#xff09;的缩写&#xff0c;它们是现代软件开发中用于自动化软件交付过程的实践。 1、…

Centos安装、迁移gitlab

Centos安装迁移gitlab 一、下载安装二、配置rb修改&#xff0c;起服务。三、访问web&#xff0c;个人偏好设置。四、数据迁移1、查看当前GitLab版本2、备份旧服务器的文件3、将上述备份文件拷贝到新服务器同一目录下&#xff0c;恢复GitLab4、停止新gitlab数据连接服务5、恢复备…

GO-学习-03-基本数据类型

数据类型&#xff1a;基本数据类型和复合数据类型 基本数据类型&#xff1a;整型、浮点型、布尔型、字符串 复合数据类型&#xff1a;数组、切片、结构体、函数、map、通道&#xff08;channel&#xff09;、接口 整型&#xff1a; package main import "fmt" im…

远程调试 Python 脚本

这段代码用于远程调试 Python 脚本&#xff0c;特别是通过 Visual Studio Code&#xff08;VS Code&#xff09;的远程调试功能。它会在指定的服务器 IP 和端口上等待调试器的连接。以下是每一行代码的详细介绍及中文注释&#xff1a; # 检查是否提供了服务器 IP 和端口 if ar…

【个人笔记】一个例子理解工厂模式

工厂模式优点&#xff1a;创建时类名过长或者参数过多或者创建很麻烦等情况时用&#xff0c;可以减少重复代码&#xff0c;简化对象的创建过程&#xff0c;避免暴露创建逻辑&#xff0c;也适用于需要统一管理所有创建对象的情况&#xff0c;比如线程池的工厂类Executors 简单工…

Apache Doris + Paimon 快速搭建指南|Lakehouse 使用手册(二)

湖仓一体&#xff08;Data Lakehouse&#xff09;融合了数据仓库的高性能、实时性以及数据湖的低成本、灵活性等优势&#xff0c;帮助用户更加便捷地满足各种数据处理分析的需求。在过去多个版本中&#xff0c;Apache Doris 持续加深与数据湖的融合&#xff0c;已演进出一套成熟…

代码改进,模型优化,强化深度学习

在线个人接代码改进&#xff0c;带跑通&#xff0c;预测模型&#xff0c;模型优化&#xff0c;增加模块&#xff0c;预测&#xff0c;微调&#xff0c;融合&#xff0c; Depth learning&#xff0c;机器学习程序带写&#xff0c;环境调试&#xff0c;代码调通&#xff0c;模型优…

32单片机开发bootloader程序

一&#xff0c;单片机为什么要使用bootloader 1、使用bootloader的好处 1) 程序隔离&#xff1a;可以同时存在多个程序&#xff0c;只要flash空间够大&#xff0c;或者通过外挂flash&#xff0c;可以实现多个程序共存&#xff0c;在多个程序之间切换使用。 2&#xff09;方便程…

OpenHarmony 入门——初识JS/ArkTS 侧的“JNI” NAPI 常见的函数详解(二)

引言 前面一篇文章OpenHarmony 入门——初识JS/ArkTS 侧的“JNI” NAPI&#xff08;一&#xff09;介绍了NAPI的基础理论知识&#xff0c;今天重点介绍下NAPI中重要的函数。 一、Native 侧的NAPI的相关的C函数 以下面一段代码为例介绍下主要函数的功能和用法。 napi_value …

01-client-go

想学习K8S源码&#xff0c;可以加 &#xff1a;mkjnnm 1、介绍 client-go 是用来和 k8s 集群交互的go语言客户端库&#xff0c;地址为&#xff1a;https://github.com/kubernetes/client-go client-go 的版本有两种标识方式&#xff1a; v0.x.y (For each v1.x.y Kubernetes…

系统模块时序图的重要性:解锁系统模块交互的全景视图

在复杂的系统开发中,理解和管理不同模块之间的交互是成功的关键。时序图是一种有效的工具,可以帮助我们清晰地展示这些交互,提升设计和开发的效率。本文将深入探讨系统模块之间的时序图,并通过实例展示其实际应用。 1. 什么是系统模块之间的时序图? 系统模块之间的时序图…

Layui表格向下滑动时表头固定悬浮

记录&#xff1a;Layui表格向下滑动时表头固定悬浮 使用table的height参数&#xff1a; 示例 //“方法级渲染”配置方式 table.render({ //其它参数在此省略height: 315 //固定值 }); table.render({ //其它参数在此省略height: full-20 //高度最大化减去差值 }); 等价于&am…

项目的小结

1.实现实时聊天 1.服务端建立一个ConcurrentHashMap<> 用来存储在线用户&#xff0c;用户账号和socket然后&#xff0c;如果有个人发了信息&#xff0c;就去数据库中查询&#xff0c;然后根据这个在线用户进行传递信息 服务端框架&#xff1a; public class ServerMain {…

git sendemail使用

教程参考&#xff1a; git-send-email - 以电子邮件形式发送补丁集 1、安装git-email 2、配置 SMTP 服务器 git config --global sendemail.smtpserver smtp.163.com git config --global sendemail.smtpserverport 465 git config --global sendemail.smtpuser xxxxxx163.c…

Hyperledger Fabric 网络体验 - 网络启动过程概览

进入fabric-samples/test-network目录&#xff0c;执行指令&#xff1a; ./network.sh up -i 2.5执行完指令能看到fabric已经启动。 作为第一次Fabric网络体验&#xff0c;网络启动主要包含三个操作&#xff0c;分别是生成配置文件、启动网络和操作网络。 配置文件 使用cr…

PHP-显示所有错误信息

1 需求 2 接口 3 示例 要在 PHP 中显示所有错误信息&#xff0c;你可以通过修改 php.ini 配置文件或在你的 PHP 脚本中设置错误报告级别来实现。以下是两种常见的方法&#xff1a; 方法一&#xff1a;修改 php.ini 配置文件 找到你的 php.ini 文件。这个文件的位置取决于你的 P…