软件设计之SSM(4)

news2024/12/28 18:18:32

软件设计之SSM(4)

路线图推荐:
【Java学习路线-极速版】【Java架构师技术图谱】
尚硅谷新版SSM框架全套视频教程,Spring6+SpringBoot3最新SSM企业级开发
资料可以去尚硅谷官网免费领取

学习内容:

基于配置类方式管理Bean

  1. 完全注解开发
  2. 第三方jar包类添加进ioc容器
  3. 如何引用其他的ioc组件

1、完全注解开发

Spring 完全注解配置(Fully Annotation-based Configuration)是指通过 Java配置类代码来配置 Spring 应用程序,使用注解来替代原本在 XML 配置文件中的配置。相对于 XML 配置,完全注解配置具有更强的类型安全性和更好的可读性。

  • 依靠注解,无法摆脱独立于XML配置,还需要第三方类配置、扫描配置、引入外部资源配置

在这里插入图片描述

注解介绍

将一个类作为Spring 的配置类

注解描述用法示例
@ComponentScan用于自动扫描指定包及其子包中的 Spring 组件(如 @Component、@Service、@Repository、@Controller)。@ComponentScan(basePackages = "com.example")
@PropertySource用于加载外部属性文件,以便在 Spring 应用程序中使用这些属性。@PropertySource("classpath:application.properties")
@Configuration表示该类可以使用 Spring IoC 容器作为源定义 bean 的来源。@Configuration public class AppConfig { ... }
package com.atguigu.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

/**
 * 使用 @Configuration 注解将一个普通的类标记为 Spring 的配置类。
 * description:java的配置类,替代xml配置文件
 * 1 包扫描注解配置
 * 2 引用外部的配置文件
 * 3 声明第三方依赖的bean
 * 步骤1: 添加@Configuration 代表是配置类
 * 步骤2: 实现上面的三个功能注释
 */
@ComponentScan("com.atguigu.ioc_01")
@PropertySource(value = "classpath:jdbc.properties")
@Configuration
public class JavaConfiguration {
}

实际使用

依旧是两步:

  • 创建容器,通过AnnotationConfigApplicationContext
  • 获取bean,通过getbean
        //1 创建容器
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(JavaConfiguration.class);
        //2 获取bean
        StudentController bean = applicationContext.getBean(StudentController.class);
        System.out.println(bean);

2、第三方jar包类添加进ioc容器

场景设计:将Druid连接池对象存储到IoC容器

@ComponentScan("com.atguigu.ioc_01")
@PropertySource(value = "classpath:jdbc.properties")
@Configuration
public class JavaConfiguration {
    @Value("${jdbc.user}")
    String username;
    @Value("${jdbc.password}")
    String password;
    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.driver}")
    String driverClassName;
    /*
    <bean ->一个方法
    方法的返回值类型 == bean组件的类型或者它的接口和父类
    方法的名字 = bean id
    方法体自定义实现过程
    方法上添加@Bean  :会让通过配置类的方法创建的组件存储到ioc容器中
    * */
    @Bean
    public DruidDataSource dataSource(){
            //使用Java代码实例化
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setUsername(username);
            dataSource.setPassword(password);
            dataSource.setUrl(url);
            dataSource.setDriverClassName(driverClassName);
            //返回结果即可
            return dataSource;
    }
}

Bean name设置

在Spring框架中,@Bean注解用于定义一个Bean,默认情况下,Bean的名字是方法的名字
如果你想显式指定Bean的名字,可以在@Bean注解中传入一个自定义的名字:

  • 在@Bean注解中,name属性和value属性其实是等价的,二者都可以用于指定Bean的名字
 @Bean(name = "customServiceName")
 @Bean(value = "customServiceName")

周期方法如何指定

  • 原有注解方案: PostConstruct + Predestory 注解指定
  • 在定义Bean时,可以通过@Bean注解的initMethoddestroyMethod属性来指定初始化方法和销毁方法。这些方法应该在对应的Bean类中定义。

3、如何引用其他的ioc组件

  • 方案1: 直接调用方法返回 Bean 实例:在一个 @Bean 方法中直接调用其他 @Bean 方法来获取 Bean 实例,虽然是方法调用,也是通过IoC容器获取对应的Bean
  • 方案2:参数引用法:通过方法参数传递 Bean 实例的引用来解决 Bean 实例之间的依赖关系
    • 当引用的参数组件有多个,比如组件A有id为AA和id为aa的两个组件,在A组件作为参数时,需要指定其中一个id作为形参名称

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

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

相关文章

共模电感工作原理:【图文讲解】

共模电感&#xff0c;相信做电源较多的朋友用的比较多&#xff0c;而做消费级产品的朋友或许用的不是那么的多。但是还是有必要了解了解。 先上图&#xff0c;看看它长什么样子&#xff1a; &#xff08;实物图&#xff09; &#xff08;结构图&#xff09; 很显然&#xff0…

【Ubuntu】安装常用软件包-mysql

我的几个服务是部署在docker的同一个网络里&#xff0c;这样相互访问就可以通过docker容器的名字访问&#xff0c;比如容器A访问容器B&#xff0c;就可以http://B:8080/xxx 这样访问&#xff0c;不用关心ip是多少。 所以mysql前面文章给安装到主机里&#xff0c;感觉有点坑自己…

02.usePrevious

在 React 开发中&#xff0c;有时我们需要访问组件的前一个状态或属性。这在进行比较、动画或其他需要历史数据的操作时特别有用。usePrevious 钩子提供了一种简单而有效的方式来存储和访问前一个值。以下是如何实现和使用这个自定义钩子&#xff1a; const usePrevious valu…

【数据类型】C和C++的区别

文章目录 一、字符串二、布尔类型 bool三、数据的输入和输出 C和C在数据类型上打区别不大&#xff0c;下面就二者在这方面的部分区别做比较。 一、字符串 C语言和C在字符串的定义和书写风格上略有差异。 C风格字符串&#xff1a; char str[]"hello";C风格字符串 st…

社交内容电商中的新机遇:2+1链动模式AI智能名片商城小程序

在当今的电商世界里&#xff0c;社交内容电商正蓬勃发展。这种模式基于高质量内容&#xff0c;将有着共同兴趣爱好的用户聚集起来形成社群&#xff0c;随后引导用户进行裂变式的传播与交易。无论是像微信、微博、快手、抖音、今日头条这样的平台形式&#xff0c;还是网红、“大…

算法笔记(四)——模拟

文章目录 替换所有的问号提莫攻击Z字形变换外观数列数青蛙 模拟算法就是根据题目的要求&#xff0c;题目让干神马就做神马&#xff0c;一步一步来 替换所有的问号 题目&#xff1a;替换所有的问号 思路 从左到右遍历整个字符串&#xff0c;找到问号之后&#xff0c;就⽤ a ~ z…

QT系统学习篇(2)- Qt跨平台GUI原理机制

一、Qt工程管理 新建项目&#xff1a; 我们程序员新建项目对话框所有5类项目模板 Application: Qt的应用程序&#xff0c;包含Qt Quick和普通窗口程序。 Library: 它可以创建动态库、静态库、Qt Creator自身插件、Qt Quick扩展插件。 其他项目: 创建单元测试项目、子目录项目…

自动驾驶系列—自动驾驶MCU架构全方位解析:从单核到多核的选型指南与应用实例

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

五子棋双人对战项目(3)——匹配模块

一、分析需求 二、约定前后端接口 三、实现游戏大厅页面&#xff08;前端代码&#xff09; 四、实现后端代码 五、线程安全问题 六、忙等问题 一、分析需求 需求&#xff1a;多个玩家&#xff0c;在游戏大厅进行匹配&#xff0c;系统会把实力相近的玩家匹配到一起。 要想实…

使用cmake配置pcl环境

项目文件在https://pan.quark.cn/s/d347f72c7432 文件中包含CMakeLists.txt&#xff0c;一个pcd文件&#xff0c;一个cpp源文件。 这里的话&#xff0c;首先你需要下载好cmake软件&#xff0c;并将其添加到环境变量。 CMakeLists.txt文件内容如下 cmake_minimum_required(VER…

「漏洞复现」EDU 某智慧平台 PersonalDayInOutSchoolData SQL注入漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

鸿蒙媒体开发系列16——图像变换与位图操作

如果你也对鸿蒙开发感兴趣&#xff0c;加入“Harmony自习室”吧&#xff01;扫描下方名片&#xff0c;关注公众号&#xff0c;公众号更新更快&#xff0c;同时也有更多学习资料和技术讨论群。 1、概述 图片处理指对PixelMap进行相关的操作&#xff0c;如获取图片信息、裁剪、缩…

鸿蒙媒体开发系列17——图片编码与EXIF处理

如果你也对鸿蒙开发感兴趣&#xff0c;加入“Harmony自习室”吧&#xff01;扫描下方名片&#xff0c;关注公众号&#xff0c;公众号更新更快&#xff0c;同时也有更多学习资料和技术讨论群。 1、图片编码 图片编码指将PixelMap编码成不同格式的存档图片&#xff08;当前仅支持…

完整网络模型训练(一)

文章目录 一、网络模型的搭建二、网络模型正确性检验三、创建网络函数 一、网络模型的搭建 以CIFAR10数据集作为训练例子 准备数据集&#xff1a; #因为CIFAR10是属于PRL的数据集&#xff0c;所以需要转化成tensor数据集 train_data torchvision.datasets.CIFAR10(root&quo…

《OpenCV》—— 指纹验证

用两张指纹图片中的其中一张对其验证 完整代码 import cv2def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)def verification(src, model):sift cv2.SIFT_create()kp1, des1 sift.detectAndCompute(src, None)kp2, des2 sift.detectAndCompute(model, None)fl…

消费电子制造企业如何使用SAP系统提升运营效率与竞争力

在当今这个日新月异的消费电子市场中&#xff0c;企业面临着快速变化的需求、激烈的竞争以及不断攀升的成本压力。为了在这场竞赛中脱颖而出&#xff0c;消费电子制造企业纷纷寻求数字化转型的突破点&#xff0c;其中&#xff0c;SAP系统作为业界领先的企业资源规划(ERP)解决方…

Python批量下载PPT模块并实现自动解压

日常工作中&#xff0c;我们总是找不到合适的PPT模板而烦恼。即使有免费的网站可以下载&#xff0c;但是一个一个地去下载&#xff0c;然后再批量解压进行查看也非常的麻烦&#xff0c;有没有更好方法呢&#xff1f; 今天&#xff0c;我们利用Python来爬取一个网站上的PPT&…

SSM整合:图书管理系统

图书管理系统 一.环境 1.数据库环境 CREATE DATABASE ssmbuild;USE ssmbuild;DROP TABLE IF EXISTS books;CREATE TABLE books (bookID INT(10) NOT NULL AUTO_INCREMENT COMMENT 书id,bookName VARCHAR(100) NOT NULL COMMENT 书名,bookCounts INT(11) NOT NULL COMMENT 数量…

Leecode热题100-48.旋转图像

给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[7,4,1],[8,5,2],[9,6,3]]示…

QML使用Qt自带软键盘例子

//注意&#xff1a;一定要保证Qt有安装VirtualKeyboard插件 import QtQuick 2.10 import QtQuick.Window 2.3 import QtQuick.Controls 2.3 import QtQuick.VirtualKeyboard 2.1 import QtQuick.VirtualKeyboard.Settings 2.1 Window { id: root visible: true w…