南通网站建设价格/上海外贸seo

南通网站建设价格,上海外贸seo,wordpress收录差劲啊,咚门wordpressSpring定义一个Bean有哪些方法?依赖注入有哪些方法? (1)定义Bean的方法 注解定义Bean,Component 用于标记一个类作为Spring的bean。当一个类被Component注解标记时,Spring会将其实例化为一个bean&#xff0…
  1. Spring定义一个Bean有哪些方法?依赖注入有哪些方法?

    (1)定义Bean的方法

    • 注解定义Bean,@Component

      用于标记一个类作为Spring的bean。当一个类被@Component注解标记时,Spring会将其实例化为一个bean,并将其添加到Spring容器中。

    • 配置文件定义Bean

    (2)依赖注入的方法

    • 字段(Field):最直接地在类的字段上使用。
    public class MyClass {@Autowiredprivate MyDependency myDependency;
    }
    
    • 构造器(Constructor):在构造器上使用,用于构造器注入。
    public class MyClass {private MyDependency myDependency;@Autowiredpublic MyClass(MyDependency myDependency) {this.myDependency = myDependency;}
    }
    
    • 方法(Method):也可以在一个方法上使用,通常是一个 setter 方法。
    public class MyClass {private MyDependency myDependency;@Autowiredpublic void setMyDependency(MyDependency myDependency) {this.myDependency = myDependency;}
    }
    
  2. 介绍IOC、AOP、反射

    (1)IOC

    ​ Spring IOC容器通过

    ​ ①封装对象的创建(将对象的创建过程交给Spring管理,从而实现了控制反转)和生命周期管理(管理对象的初始化和销毁过程),

    ​ ②使用依赖注入来解耦对象之间的依赖关系(通过 Spring 容器将类 A 所依赖的 B 的实例注入到 A 中,这样 A 和 B 不再直接依赖,而是通过容器来提供),

    ​ ③利用反射和配置元数据动态地创建和管理对象(当 Spring 容器启动时,它会根据配置文件或注解(元数据)扫描类的信息,通过反射技术实例化对象,而不需要编写具体的 new 代码。反射让 Spring 能够动态地操作类的构造函数、方法等),

    ​ ④同时提供作用域管理功能(对象的生命周期和可见性范围。Spring 提供了多种作用域,容器会根据作用域来管理对象的实例化、销毁等过程。Singleton(单例)、Prototype(原型)、Request、Session、Application 等作用域)。

    (2)AOP

    ​ 面向切面编程,AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装起来,以减少系统的重复代码,降低模块间的耦合度。

    ​ 两个例子:权限校验拦截器、动态切换数据源。

    ​ Spring AOP的实现依赖于动态代理技术。动态代理是在运行时动态生成代理对象,而不是在编译时。

    注解
    @Aspect用于定义切面,标注在切面类上。
    @Pointcut定义切点,标注在方法上,用于指定连接点。
    @Before在方法执行之前执行通知。
    @After在方法执行之后执行通知。
    @Around在方法执行前后都执行通知。

    (3)反射

    ​ 允许在运行时动态地查询和操作类、方法、字段等信息,并且能够通过反射来调用类中的方法或修改类的属性。反射机制的核心原理是:通过 Class 类来获取类的结构信息,并且使用这些信息在运行时动态地操作类的对象。IOC、DI、动态代理就是用到了反射。

    ①获取class对象:可以通过类的 Class 对象来访问类的信息。

    Class<?> clazz = Class.forName("Person");  //括号里的内容可以是程序运行时才输入的内容
    

    ②查询类的结构信息:通过 Class 对象,可以获取类的构造方法、方法、字段、接口、父类等信息。

    Method[] methods = clazz.getMethods(); // 获取所有公共方法
    Field[] fields = clazz.getFields(); // 获取所有公共字段
    Constructor[] constructors = clazz.getConstructors(); // 获取所有公共构造函数
    

    ③动态创建对象

    Constructor<?> constructor = clazz.getConstructor(); // 获取无参构造
    Object instance = constructor.newInstance(); // 使用构造函数创建对象实例
    

    ④调用方法

    Method method = clazz.getDeclaredMethod("myMethod", String.class);
    method.setAccessible(true);  // 如果是私有方法,需要设置访问权限
    method.invoke(obj, "parameter");  // 调用方法
    
  3. 介绍动态代理、静态代理?

    ​ 代理模式是设计模式中的一种,它通过提供代理对象来控制对原对象的访问。代理对象充当中介,通常在请求实际操作之前或之后做一些额外的工作(例如检查权限、缓存结果、延迟加载等)。

    控制访问:代理可以控制对实际对象的访问,增加额外的功能(如安全性、权限管理、日志记录等)。

    延迟加载:通过代理,可以延迟初始化或执行耗时的操作,直到真正需要时才执行。

    性能优化:代理对象可以缓存结果,减少重复计算或请求,提高性能。

    增强功能:代理对象可以在不修改原对象代码的情况下,为其增加新的功能,如事务管理、日志记录等。

    (1)动态代理

    动态代理是在运行时创建代理对象,代理对象在运行时被动态地生成,因此不需要在编译时就确定代理类。Java 提供了两种方式来实现动态代理:

    1. JDK 动态代理
      • 通过 java.lang.reflect.Proxy 类和 InvocationHandler 接口动态生成代理类。JDK 动态代理要求目标类实现一个接口
    2. CGLIB(Code Generation Library)代理
      • 通过字节码生成技术,动态创建目标类的子类来实现代理。CGLIB 代理不要求目标类实现接口,而是通过继承目标类来实现代理。

    (2)静态代理

    ​ 代理类是在编译时就已经写好并且确定的。是由开发者手动编写的,并且在程序运行之前就已经存在。例如,你在编写代码时就知道你需要一个 Proxy 类,它会代理 RealSubject 类的方法。在静态代理中,代理类和目标类的关系是固定的,编译时就已经确定。

    ​ 代理模式是JAVA的一种设计模式,而AOP是Spring框架中的一个特性,是使用了动态代理来实现的。

  4. Spring的循环依赖的原因以及解决方法;(众安)

    循环依赖指的是两个类中的属性相互依赖对方:例如 A 类中有 B 属性,B 类中有 A属性,从而形成了一个依赖闭环。

    Spring中的循环依赖问题有三种情况:

    • 第一种:通过构造方法进行依赖注入时产生的循环依赖问题。
    • 第二种:通过setter方法进行依赖注入且是在多例(原型)模式下产生的循环依赖问题。
    • 第三种:通过setter方法进行依赖注入且是在单例模式下产生的循环依赖问题。

    单例模式适用于全局唯一的资源管理,如配置管理、日志记录、数据库连接池等。它的特点是保证类在全局范围内只有一个实例,所有地方都使用同一个对象。

    多例模式适用于需要多个独立实例的场景,如用户会话、任务调度、订单管理等。每个实例有自己的状态和行为,不共享数据。

    只有【第三种方式】的循环依赖问题被 Spring 解决了,其他两种方式在遇到循环依赖问题时,Spring都会产生异常。

    (1)Spring实例化Bean:Spring尝试创建A的实例,发现A依赖B,因此需要实例化B。Spring在创建B时,发现B依赖A,但此时A还没有完成初始化,所以Spring会创建A的空对象并将其放入singletonObjects一级缓存中并开始创建B。

    (3)循环依赖暴露

    • 当Spring尝试创建B时,由于A还没有完全初始化,Spring会把A实例(未完全初始化)提前暴露到earlySingletonObjects二级缓存中,这时A成为一个半初始化的Bean。
    • B可以通过earlySingletonObjects二级缓存获得这个提前暴露的A对象,从而完成B的依赖注入。

    (3)初始化Bean

    • 依赖注入完成后,Spring继续初始化B(如调用@PostConstruct等),然后将B放入三级singletonFactories缓存中,表示B已经完全初始化。

    • Spring继续完成A的初始化工作,注入B,完成生命周期的其他部分,并将A放入三级singletonFactories缓存中,表示A也已经完全初始化。

    (4)总结

    • 在依赖注入过程中,Spring通过earlySingletonObjects二级缓存提供了B对A的依赖,通过singletonFactories三级缓存提供了A对B的依赖,从而打破了循环依赖。
  5. 列举几个Spring常用的注解?(美团)

    注解作用
    @Autowired自动装配bean,当Spring容器中存在与要注入的属性类型匹配的bean时,它会自动将bean注入到属性中
    @ComponentSpring会将一个类实例化为一个bean,并将其添加到Spring容器中。
    @Configuration用于标记一个类作为Spring的配置类,配置类可以包含@Bean注解的方法,用于定义和配置bean,作为全局配置。
    @Bean用于标记一个方法作为Spring的bean工厂方法,当一个方法被@Bean注解标记时,Spring会将该方法的返回值作为一个bean,并将其添加到Spring容器中
    @Service用于标记服务层的bean,是@Component注解的特例,一般标记在业务service的实现类。
    @Repository用于标记数据访问层的bean,它也是@Component注解的特例。
    @Controller用于标记控制层的bean,它也是@Component注解的特例。
  6. spring、springboot、SpringMVC的区别及关系?(康泰)

    Spring 是一个全面的应用开发框架,提供了全面的基础设施和功能支持。

    Spring MVC 是 Spring 框架中的一个模块,专门用于 Web 开发,采用 MVC 模式来处理 Web 请求和响应。它依赖于 Spring 框架的核心功能,如 IoC 和 AOP。

    Spring Boot 是一个基于 Spring 的项目,它封装了 Spring 和其他相关技术(如 Spring MVC、Spring Data、Spring Security 等),提供自动配置、快速项目启动器、内嵌服务器三大功能,使开发者能够快速启动和构建 Spring 应用。

    • 自动配置
    • 快速项目启动器,通过引入不同的 Starter,可以快速集成常用的框架和库(如数据库、消息队列、Web 开发等),极大地提高了开发效率。
    • 内嵌服务器(Tomcat、Jetty、Undertow),无需额外配置,即可将应用打包成可执行的 JAR 文件,方便部署和运行。

    Spring+Spring MVC = Spring Boot

  7. springboot的自动配置原理?(美团、得物)springBoot启动机制,启动之后做了哪些步骤?(B站)

  8. SpringBoot重要注解

    @SpringBootApplication用于标注主应用程序类,标识一个Spring Boot应用程序的入口点,同时启用自动配置和组件扫描。
    @Controller标识控制器类,处理HTTP请求。
    @RestController结合@Controller和@ResponseBody,返回RESTful风格的数据。
    @Service标识服务类,通常用于标记业务逻辑层。
    @Repository标识数据访问组件,通常用于标记数据访问层。
    @Component通用的Spring组件注解,表示一个受Spring管理的组件。
    @Autowired用于自动装配Spring Bean。
    @Value用于注入配置属性值。
    @RequestMapping用于映射HTTP请求路径到Controller的处理方法。
    @GetMapping、@PostMapping、@PutMapping、@DeleteMapping简化@RequestMapping的GET、POST、PUT和DELETE请求。
    @Configuration用于指定一个类为配置类,其中定义的bean会被Spring容器管理。
  9. 怎么用原生的MyBatis去查询?

    (1)配置MyBatis: 在配置文件中配置数据源、MyBatis的Mapper文件位置等信息。

    (2)创建实体类:创建与数据库表对应的实体类,字段名和类型需与数据库表保持一致。

    public class User {private Long id;private String username,private String email,// Getters and setters
    }
    

    (3)编写SQL映射文件:在resources目录下创建XML文件,定义SQL语句和映射关系。

    <mapper namespace="com.example.dao.UserMapper"><select id="selectUserById" resultType="com.example.model.User">SELECT * FROM users WHERE id = #{id}</select>
    </mapper>
    

    (4)编写DAO接口:创建DAO接口,定义查询方法。

    public interface UserMapper {User selectUserById(Long id);
    }
    

    (5)编写具体的SQL查询语句:在XML文件中编写对应的SQL语句。

    (6)调用查询方法:在服务层或控制层中调用DAO接口中的方法进行查询。

    // 在Service层中调用
    User user = userMapper.selectUserById(1);
    
  10. MyBatis里的 # 和 $ 的区别?

  • Mybatis 在处理 #{}时,会创建预编译的 SQL 语句,将 SQL 中的 #{} 替换为?号,在执行 SQL 时会为预编译 SQL 中的占位符(?)赋值,调用 PreparedStatement 的 set 方法来赋值,预编译的 SQL 语句执行效率高,并且可以防止SQL注入,提供更高的安全性,适合传递参数值。

  • Mybatis 在处理 ${} 时,只是创建普通的 SQL语句,然后在执行 SQL语句时 MvBatis 将参数直接拼入到 SQL里,不能防止 SQL注入,因为参数直接拼接到 SQL语句中,如果参数未经过验证、过滤,可能会导致安全问题。

    比如:

    <select id="getUserByUsername" resultType="User">SELECT * FROM users WHERE username = '${username}'
    </select>
    

    在这个查询中,${username} 会直接被传入的 username 值替换,假如传入的 username 是恶意的,例如 "' OR 1=1",查询语句就变成了:

    SELECT * FROM users WHERE username = '' OR 1=1
    

    这就是典型的 SQL 注入,因为 $ 直接拼接了参数值,导致不安全的 SQL 被执行。

    大多数情况下都应该使用 #,特别是涉及到用户输入的值时。它可以安全地处理用户输入,避免 SQL 注入。只有在确实需要拼接动态 SQL 的结构部分(如表名、列名)时,才应该使用 $

  1. MybatisPlus和Mybatis的区别?(百度)

    MybatisPlus是一个基于MyBatis的增强工具库。

    • CRUD操作:MybatisPlus通过继承BaseMapper接口,提供了一系列内置的快捷方法,使得CRUD操作更加简单,无需编写重复的SQL语句。
    • 代码生成器:MvbatisPlus提供了代码生成器功能,可以根据数据库表结构自动生成实体类、Mapper接口以及XML映射文件,减少了手动编写的工作量。
    • 通用方法封装:MybatisPlus封装了许多常用的方法,如条件构造器、排序、分页查询等,简化了开发过程,提高了开发效率。
    • 分页插件:MybatisPlus内置了分页插件,支持各种数据库的分页查询,开发者可以轻松实现分页功能,而在传统的MyBatis中,需要开发者自己手动实现分页逻辑。
    • 多租户支持:MvbatisPlus提供了多租户的支持,可以轻松实现多租户数据隔离的功能。
    • 注解支持:MvbatisPlus引入了更多的注解支持,使得开发者可以通过注解来配置实体与数据库表之间的映射关系,减少了XML配置文件的编写。

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

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

相关文章

Qt 实现绘图板(支持橡皮擦与 Ctrl+Z 撤销功能)[特殊字符]

作业&#xff1a; 1&#xff1a;实现绘图的时候&#xff0c;颜色的随时调整 2&#xff1a;追加橡皮擦功能 3&#xff1a;配合键盘事件&#xff0c;实现功能 当键盘按 ctrlz的时候&#xff0c;撤销最后一次绘图 头文件.h #ifndef WIDGET_H #define WIDGET_H#include <QWidge…

计算机网络(1) 网络通信基础,协议介绍,通信框架

网络结构模式 C/S-----客户端和服务器 B/S -----浏览器服务器 MAC地址 每一个网卡都拥有独一无二的48位串行号&#xff0c;也即MAC地址&#xff0c;也叫做物理地址、硬件地址或者是局域网地址 MAC地址表示为12个16进制数 如00-16-EA-AE-3C-40 &#xff08;每一个数可以用四个…

【无人机三维路径规划】基于CPO冠豪猪优化算法的无人机三维路径规划Maltab

代码获取基于CPO冠豪猪优化算法的无人机三维路径规划Maltab 基于CPO冠豪猪优化算法的无人机三维路径规划 一、CPO算法的基本原理与核心优势 冠豪猪优化算法&#xff08;Crested Porcupine Optimizer, CPO&#xff09;是一种新型元启发式算法&#xff0c;其灵感来源于冠豪猪的…

简洁实用的3个免费wordpress主题

高端大气动态炫酷的免费企业官网wordpress主题 非常简洁的免费wordpress主题&#xff0c;安装简单、设置简单&#xff0c;几分钟就可以搭建好一个wordpress网站。 经典风格的免费wordpress主题 免费下载 https://www.fuyefa.com/wordpress

RabbitMQ 高级特性解析:RabbitMQ 消息可靠性保障 (上)

RabbitMQ 核心功能 RabbitMQ 高级特性解析&#xff1a;RabbitMQ 消息可靠性保障 &#xff08;上&#xff09;-CSDN博客 RabbitMQ 高级特性&#xff1a;从 TTL 到消息分发的全面解析 &#xff08;下&#xff09;-CSDN博客 前言 最近再看 RabbitMQ&#xff0c;看了看自己之前写…

用DeepSeek-R1-Distill-data-110k蒸馏中文数据集 微调Qwen2.5-7B-Instruct!

下载模型与数据 模型下载&#xff1a; huggingface&#xff1a; Qwen/Qwen2.5-7B-Instruct HF MirrorWe’re on a journey to advance and democratize artificial intelligence through open source and open science.https://hf-mirror.com/Qwen/Qwen2.5-7B-Instruct 魔搭&a…

在IDEA中进行git回滚操作:Reset current branch to here‌或Reset HEAD

问题描述 1&#xff09;在本地修改好的代码&#xff0c;commit到本地仓库&#xff0c;突然发觉有问题不想push推到远程仓库了&#xff0c;但它一直在push的列表中存在&#xff0c;那该怎么去掉push列表中的内容呢&#xff1f; 2&#xff09;合并别的分支到当前分支&#xff0…

六十天前端强化训练之第十一天之事件机制超详解析

欢迎来到编程星辰海的博客讲解 目录 一、事件模型演进史 1.1 原始事件模型&#xff08;DOM Level 0&#xff09; 1.2 DOM Level 2事件模型 1.3 DOM Level 3事件模型 二、事件流深度剖析 2.1 捕获与冒泡对比实验 2.2 事件终止方法对比 三、事件委托高级应用 3.1 动态元…

匿名GitHub链接使用教程(Anonymous GitHub)2025

Anonymous GitHub 1. 引言2. 准备3. 进入Anonymous GitHub官网4. 用GitHub登录匿名GitHub并授权5. 进入个人中心&#xff0c;然后点击• Anonymize Repo实例化6. 输入你的GitHub链接7. 填写匿名链接的基础信息8. 提交9. 实例化对应匿名GitHub链接10. 进入个人中心管理项目11. 查…

Git系列之git tag和ReleaseMilestone

以下是关于 Git Tag、Release 和 Milestone 的深度融合内容&#xff0c;并补充了关于 Git Tag 的所有命令、详细解释和指令实例&#xff0c;条理清晰&#xff0c;结合实际使用场景和案例。 1. Git Tag 1.1 定义 • Tag 是 Git 中用于标记特定提交&#xff08;commit&#xf…

开源项目介绍:Native-LLM-for-Android

项目地址&#xff1a;Native-LLM-for-Android 创作活动时间&#xff1a;2025年 支持在 Android 设备上运行大型语言模型 &#xff08;LLM&#xff09; &#xff0c;具体支持的模型包括&#xff1a; DeepSeek-R1-Distill-Qwen: 1.5B Qwen2.5-Instruct: 0.5B, 1.5B Qwen2/2.5VL:…

深入理解 Java 虚拟机内存区域

Java 虚拟机&#xff08;JVM&#xff09;是 Java 程序运行的核心环境&#xff0c;它通过内存管理为程序提供高效的执行支持。JVM 在运行时将内存划分为多个区域&#xff0c;每个区域都有特定的作用和生命周期。本文将详细介绍 JVM 的运行时数据区域及其功能&#xff0c;并探讨与…

PDF转JPG(并去除多余的白边)

首先&#xff0c;手动下载一个软件&#xff08;poppler for Windows&#xff09;&#xff0c;下载地址&#xff1a;https://github.com/oschwartz10612/poppler-windows/releases/tag/v24.08.0-0 否则会出现以下错误&#xff1a; PDFInfoNotInstalledError: Unable to get pag…

VanillaVueSvelteReactSolidAngularPreact前端框架/库的简要介绍及其优势

VanillaVueSvelteReactSolidAngularPreact前端框架/库的简要介绍及其优势。以下是这些前端框架/库的简要介绍及其优势&#xff1a; 1. Vanilla 定义&#xff1a;Vanilla 并不是一个框架&#xff0c;而是指 原生 JavaScript&#xff08;即不使用任何框架或库&#xff09;。优势…

Jmeter接口测试详解

今天笔者呢&#xff0c;想给大家聊聊Jmeter接口测试流程详解&#xff0c;废话不多说直接进入正题。 一、jmeter简介 Jmeter是由Apache公司开发的java开源项目&#xff0c;所以想要使用它必须基于java环境才可以&#xff1b; Jmeter采用多线程&#xff0c;允许通过多个线程并…

DeepSeek开启AI办公新模式,WPS/Office集成DeepSeek-R1本地大模型!

从央视到地方媒体&#xff0c;已有多家媒体机构推出AI主播&#xff0c;最近杭州文化广播电视集团的《杭州新闻联播》节目&#xff0c;使用AI主持人进行新闻播报&#xff0c;且做到了0失误率&#xff0c;可见AI正在逐渐取代部分行业和一些重复性的工作&#xff0c;这一现象引发很…

通过Golang的container/list实现LRU缓存算法

文章目录 力扣&#xff1a;146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2. 插入元素3. 删除元素4. 遍历链表5. 获取链表长度使用场景注意事项 源代码阅读 在 Go 语言中&#xff0c;container/list 包提供了一个双向链表的实现。链表是一种常见的数据结构&#…

【大学生体质】智能 AI 旅游推荐平台(Vue+SpringBoot3)-完整部署教程

智能 AI 旅游推荐平台开源文档 项目前端地址 ☀️项目介绍 智能 AI 旅游推荐平台&#xff08;Intelligent AI Travel Recommendation Platform&#xff09;是一个利用 AI 模型和数据分析为用户提供个性化旅游路线推荐、景点评分、旅游攻略分享等功能的综合性系统。该系统融合…

DeepSeek R1-32B医疗大模型的完整微调实战分析(全码版)

DeepSeek R1-32B微调实战指南 ├── 1. 环境准备 │ ├── 1.1 硬件配置 │ │ ├─ 全参数微调:4*A100 80GB │ │ └─ LoRA微调:单卡24GB │ ├── 1.2 软件依赖 │ │ ├─ PyTorch 2.1.2+CUDA │ │ └─ Unsloth/ColossalAI │ └── 1.3 模…

npm install -g @vue/cli 方式已经无法创建VUE3项目

采用该方式&#xff0c;启动VUE3项目&#xff0c;运行命令&#xff0c;出现报错&#xff1a; npm install -g vue/cli PS D:\> npm install -g vue/cli npm warn deprecated inflight1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lr…