Spring复习(二)

news2025/1/20 5:58:26

FactoryBean

FactoryBean是一个接口,需要创建一个类实现该接口

package com.mao.pojo;

import org.springframework.beans.factory.FactoryBean;

public class StudentFactoryBean implements FactoryBean {
    //getObject方法将对象交给Spring容器来管理
    @Override
    public Object getObject() throws Exception {
        return new Student();
    }
    
    //设置所提供的的对象的类型
    @Override
    public Class<?> getObjectType() {
        return Student.class;
    }
    
    //设置是否单例
    @Override
    public boolean isSingleton() {
        return FactoryBean.super.isSingleton();
    }
}

将该类交给spring容器来管理

<bean id="studentFactory" class="com.mao.pojo.StudentFactoryBean"/>

测试:

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
Student studentFactory = (Student) applicationContext.getBean("studentFactory");
System.out.println(studentFactory);

基于XML的自动装配

自动装配:根据指定的策略在IOC容器中匹配一个bean,自动为指定的bean中所依赖的类类型或接口类型赋值

基于XML的自动装配是在spring核心配置文件中,通过配置bean中的autowire属性来指定自动装配的策略

<bean id="userController" class="com.mao.controller.UserController" autowire="byType"></bean>

autowire有四种装配策略:
no,default表示不装配,即bean中的属性不会自动匹配某个bean为属性赋值
byType:根据属性的类型进行赋值
a>若通过类型没有找到任何一个类型匹配的bean,此时不装配,使用默认值
b>若通过类型找到了多个类型匹配的bean,此时会抛出异常
总结:使用byType实现自动装配时,IOC容器有且只有一个类型匹配的bean能够为属性赋值。
byName:根据要赋值的属性的属性名,例如:< property name=“UserService”>来进行赋值
当类型匹配的bean有多个时,可以使用byName来实现自动装配

基于注解来管理bean

@Component:将类标识为普通组件,即将类加载为bean交给springioc来管理
@Controller:将类标识为控制层组件
@Service:将类标识为业务层组件
@Repository:将类标识为持久层组件

在Spring中开启注解扫描

在spring核心配置文件中添加:

 <!--扫描组件-->
    <context:component-scan base-package="com.mao.exercise">
    </context:component-scan>

context:exclude-filter:排除扫描

 	<!--扫描组件-->
    <context:component-scan base-package="要扫描的包">
    	<!--根据注解来排除,expression表示注解的全限定名-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <!--根据类型来排除,expression表示类型的全限定名-->
        <context:exclude-filter type="assignable" expression="com.mao.exercise.controller.UserController"/>
         </context:component-scan>

context:include-filter:包含扫描

<!--扫描组件-->
    <context:component-scan base-package="com.mao.exercise" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

需要配置use-default-filters:false,使默认扫描指定包包含全部的功能失效,否则包含扫描就不起作用。

注意:通过注解+扫描配置的bean的id,默认值为类的小驼峰即UserController的bean的id为userController
自定义id:
在这里插入图片描述

@Autowired

通过@Autowired注解可以实现自动装配功能
在这里插入图片描述

@Autowired原理

a>默认通过byType的方式,在IOC容器中通过类型匹配某个bean为属性赋值
b>若IOC容器中有多个相同类型的bean,此时会自动转换成byName的方式来为属性赋值,即将要赋值的属性名作为bean的id来匹配某个bean
c>如果byType和byName都无法实现自动装配,且IOC容器中有多个类型匹配的bean,且这些bean的id和要赋值的属性的属性名都不一致。
d>可以通过@Qualifier的value值来指定某个bean的id来为属性赋值

注意:若IOC容器中没有任何一个类型匹配的bean,在@Autowired中有个属性(require=true),该属性要求必须完成自动装配,否则就报错,可以将require=false,来避免出现该情况

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

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

相关文章

Go web开发

使用 Gin-Plus 框架快速进行 web 开发 一、前言 安装 Get go get github.com/archine/gin-plus/v2v2.0.0Mod # go.mod文件加入下面的一条 github.com/archine/gin-plus/v2 v2.0.0# 命令行在该项目目录下执行 go mod tidy二、项目使用 1、启动入口 定义 main 文件&#xf…

来自一位双非本科大二学生的?自我救赎:堕落——蜕变

回望2022&#xff1a;获得&#xff1f;&#xff1a;失去&#xff1b;开心&#xff1f;&#xff1a;难过&#xff1b;伤心&#xff1f;&#xff1a;释怀 先提一句&#xff0c;总结2022&#xff0c;有后悔、不甘&#xff1b;有开心、感动&#xff1b;2022结束&#xff0c;更多的是…

springboot 2.6.6读不到nacos上的配置文件

搭建了一个微服务项目 spring boot 版本&#xff1a;2.6.6 spring cloud 版本&#xff1a;2021.0.1 spring cloud alibaba 版本&#xff1a;2021.0.1.0 遇到的问题无论是在application.yml还是在bootstrap.properties属性文件里配置服务中心相关的的信息都不能读取nacos上的…

LeetCode[215]数组中的第K个最大元素

难度&#xff1a;中等题目&#xff1a;给定整数数组 nums和整数 k&#xff0c;请返回数组中第 k个最大的元素。请注意&#xff0c;你需要找的是数组排序后的第 k个最大的元素&#xff0c;而不是第 k个不同的元素。你必须设计并实现时间复杂度为 O(n)的算法解决此问题。示例 1:输…

2.5(完结)C语言重点解剖内存管理函数要点速记

1.指针如果有具体的指向&#xff0c;包括野指针&#xff0c;对应的合法性&#xff0c;我们是无法验证的。 2.所有的指针如果没有被直接使用&#xff0c;必须设置为NULL。 3.在函数内部&#xff0c;要验证指针的合法性&#xff0c;本质上是验证指针!NULL。 4.自定义函数传入指…

Odoo 16 企业版手册 - 库存管理之到岸成本

到岸成本 到岸成本可以定义为买方在购买时应支付的产品总价。这包括运输、关税、手续费、服务费、运费等。为了获得产品的销售价格&#xff0c;这些额外费用被添加到产品的实际成本中。根据公司政策&#xff0c;不同公司的到岸成本计算方法将有所不同。在Odoo 库存模块中&#…

JAVA中的for循环使用方法

一. 循环结构1. 概念在学习Java里的循环之前&#xff0c;我们先来了解一下到底什么是循环&#xff0c;以及循环的作用。我们先来看下面这张图&#xff1a;大家想一下&#xff0c;我们在400米的跑道上参加万米长跑&#xff0c;正常情况下要跑25圈&#xff0c;这25圈每一圈的跑步…

FPGA:逻辑运算及逻辑门

文章目录逻辑变量与逻辑函数逻辑运算基本逻辑运算及对应的逻辑门&#xff11;.与运算与逻辑举例状态表与真值表与逻辑符号与逻辑表达式与门电路&#xff12;. 或运算或逻辑举例电路状态表状态表与真值表或逻辑符号或逻辑表达式或门电路3. 非运算非逻辑举例电路状态表状态表与真…

Lichee_RV学习系列---认识Lichee Rv Dock、环境搭建和编译第一个程序

Lichee Rv Dock学习系列文章目录 文章目录Lichee Rv Dock学习系列文章目录前言一、认识Lichee RV1、D1-H 芯片2、Lichee RV开发板3、系统镜像二、Lichee RV 固件烧录1、要求基本硬件2、基本资料下载3、固件烧录在这里插入图片描述三、连接上开发板1、ADB方式连接a&#xff1a;A…

【ART-Pi学习FreeRTOS】使用STM32CubeIDE搭建开发环境

【ART-Pi】使用STM32CubeIDE搭建开发环境STM32CubeIDESTM32CubeIDE新建工程进入芯片选型界面HSE和LSE时钟源设置时钟系统&#xff08;时钟树&#xff09;配置Generate CodeSTM32CubeIDE STM32CubeIDE安装比较简单&#xff0c;这里略过&#xff0c;可以百度搜索相关教程 STM32…

Excel 中选择行的快捷方式有哪些

在处理不同类型的数据时,用户需要多次选择任意行或多行。在这种情况下,任何人都必须知道选择行的快捷方式。了解一些快捷键,如在Excel中选择行,使任何人都能熟练使用MS Excel,而且这对任何人以更智能的方式工作都很有帮助。当一个人开始使用快捷方式执行他的/她的工作时,…

Spring与SpringMVC的区别和联系是啥?

Spring Spring是一个开源容器框架&#xff0c;可以接管web层&#xff0c;业务层&#xff0c;dao层&#xff0c;持久层的组件&#xff0c;并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IoC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。 …

餐饮巨头被攻击的“致命”48小时

编者按数字化浪潮蓬勃兴起&#xff0c;企业面临的安全挑战亦日益严峻。腾讯安全近期将复盘2022年典型的攻击事件&#xff0c;帮助企业深入了解攻击手法和应对措施&#xff0c;完善自身安全防御体系。本篇是第八期&#xff0c;讲述了某餐饮巨头遭遇黑客多轮次攻击、全国点餐系统…

Linux ALSA 之六:ALSA ASoc 架构

ALSA ASoc 架构一、ASOC 由来二、从 HW 角度三、从 SW 角度四、重要数据结构关联图1、基于 Linux 3.0 数据结构图2、基于 Linux 4.0 数据结构图一、ASOC 由来 ASoC–ALSA System on Chip&#xff0c;是建立在标准 ALSA 驱动层上&#xff0c;为了更好地支持嵌入式处理器和移动设…

软件著作权申请注意事项

​软著申请需要哪些材料 ①企业申请&#xff1a;企业营业执照副本复印件&#xff08;加盖公章&#xff09;、身份证复印件&#xff08;正反面&#xff09;。 个人申请&#xff1a;个人身份证复印件。 ②软件设计/使用说明书文档一份 文档可根据要求提供&#xff0c;可以是软件…

c#使用配置文件

在我们开发软件的时候&#xff0c;有时候有很多的配置文件&#xff0c;可以把配置的参数保存到本地&#xff0c;那么肯定要对文件进行读和写的操作&#xff0c;使用SharpConfig可以很简单的实现这个功能。 下面是GitHub的介绍。 https://codeload.github.com/cemdervis/Sharp…

常见的锁策略

文章目录一、常见的锁策略乐观锁 vs 悲观锁轻量级锁 vs 重量级锁自旋锁 vs 挂起等待锁互斥锁 vs 读写锁公平锁 vs 非公平锁可重入锁 vs 不可重入锁二、CAS原子类实现自旋锁ABA问题一、常见的锁策略 我们这里所介绍到的锁策略&#xff0c;不仅仅是java中的&#xff0c;任何涉及…

异常检测-缺陷检测-论文精读PaDiM

Abstract 我们提出了一个新的 Patch 分布建模框架&#xff0c;在单类学习的设置下&#xff0c;PaDiM 同时检测和定位图像中的异常。PaDiM 利用一个预先训练好的卷积神经网络 (CNN) 进行 patch 嵌入&#xff0c;利用多元高斯分布得到正常类的概率表示。它还利用了 CNN 的不同语…

基础1-用于癫痫发作预测的卷积门控递归神经网络

A Convolutional Gated Recurrent Neural Network for Epileptic Seizure Prediction ABSTRACT 在本文中&#xff0c;我们提出了一种卷积门控递归神经网络(CGRNN)来预测癫痫发作&#xff0c;基于从EEG数据中提取的代表信号的时间方面和频率方面的特征。使用波士顿儿童医院收集…

priority_queue的介绍及使用(18)

目录 1、priority_queue的介绍 2、priority_queue的使用 3、priority_queue的模拟实现 1、简单实现一个大堆的 2、带仿函数的 1、初识仿函数 2、priority_queue带仿函数版本 3、其他 1、priority_queue的介绍 1、优先队列是一种容器适配器&#xff0c;根据严格的弱排序…