spring01

news2024/12/25 10:04:39
id和name

id只能取一个,name可以取多个,,,不同的bean,,id和name不能重复…
name之间可以使用,分隔,也可以使用空格 分隔

<bean class="com.cj.Dog" id="dog02" name="dog,dog1,dog2"/>

xml中没有设置id或者name,默认的beanName是类的全路径com.cj.Dog,
如果多个bean都没有配置id,和name,,默认的beanName就是类的全路径#编号

属性注入
set注入

通过无参构造方法创建,setter赋值
普通属性注入

复杂属性,数组,list,map,properties注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean class="com.cj.User" id="user">
        <property name="name" value="cc"/>
        <property name="address" value="chengdu"/>
        <property name="age" value="1"/>
        <property name="dog" ref="dog"/>
        <property name="cats">
            <list>
                <bean class="com.cj.Cat">
                    <property name="name" value="瓜瓜"/>
                </bean>
                <ref bean="cat"/>
            </list>
        </property>


        <property name="favorites">
            <array>
                <value>篮球</value>
                <value>足球</value>
            </array>
        </property>

        <property name="info">
            <map>
                <entry key="nation" value="汉族"/>
                <entry key="edu" value="本科"/>
            </map>
        </property>
        <property name="job">
            <props>
                <prop key="salary">10000</prop>
                <prop key="position">java</prop>
            </props>
        </property> 

    </bean>

    <bean class="com.cj.Dog" id="dog">
        <property name="name" value="小黑"/>
    </bean>


    <bean class="com.cj.Cat" id="cat">
        <property name="name" value="可乐"/>
    </bean>

</beans>
构造器注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean class="com.cj.User" id="user">
    <constructor-arg name="name" value="cc"/>
    <constructor-arg name="dog">
        <bean class="com.cj.Dog">
            <property name="name" value="小黑"/>
        </bean>
    </constructor-arg>
    <constructor-arg name="cats">
        <list>
            <bean class="com.cj.Cat">
                <property name="name" value="瓜瓜"/>
            </bean>
        </list>
    </constructor-arg>
    <constructor-arg name="address" value="chengdu"/>
    <constructor-arg name="age" value="1"/>
    <constructor-arg name="favorites">
        <array>
            <value>篮球</value>
        </array>
    </constructor-arg>
    <constructor-arg name="info">
        <map>
            <entry key="edu" value="本科"/>
        </map>
    </constructor-arg>
    <constructor-arg name="job">
        <props>
            <prop key="hehe">123</prop>
        </props>
    </constructor-arg>
</bean>


</beans>
p名称空间,,本质是set方法
  <bean class="com.cj.Dog" id="dog" p:name="小黄" p:age="1"/>
属性自动注入

autowire属性:

  • no : 不自动注入。。默认为no
  • byName : 根据bean的名字注入,,set注入
  • byType : 根据类型注入,,,set注入
  • constructor : 构造函数注入
  • default : 继承父标签上的 default-autowire
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <beans default-autowire="byType">
        <bean class="com.cj.Dog" id="dog">
            <property name="name" value="小黑"/>
        </bean>

        <!--    no : 默认
                byName : 根据名字注入
                byType : 根据类型注入
                constructor : 构造方法注入
                default: 自己不决定,由他的parent标签去决定
        -->
        <bean class="com.cj.User" id="user" autowire="default">
            <property name="name" value="cc"/>
        </bean>
    </beans>

</beans>
配置文件加载
  • FileSystemXmlApplication : 当前项目根目录下,开始配置文件
  • ClassPathXmlApplication : classpath
多个bean不写name和id,,默认的beanName

xml配置中,beanName是在DefaultBeanNameGenerator
java配置中,beanName是在AnnotationBeanNameGenerator
都是BeanNameGenerator接口
在这里插入图片描述

    public static void main(String[] args) {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans04.xml");
        User user = ctx.getBean("com.cj.User", User.class);
        User user1 = ctx.getBean("com.cj.User#0", User.class);
        User user2 = ctx.getBean("com.cj.User#1", User.class);
        User user3 = ctx.getBean("com.cj.User#2", User.class);
        System.out.println("user = " + user);
        System.out.println("user2 = " + user2);
        System.out.println("user3 = " + user3);
        System.out.println(user==user1);
    }

第一个com.cj.User#0 将 com.cj.User作为别名,跟#0绑定,,
后面不绑定是因为 com.cj.User 已经存在在容器中,,第一个是因为com.cj.User在容器中没有

id和name的处理

id是beanName,, name是作为别名,,
如果id没有配置, beanName是name属性的第一个,,其他name属性为别名,,,

bean的作用域

scope:

  • singleton :单例,,多次取,只会是同一个实例
  • prototype : 多例,,每次获取都不同
  • reqeust : web环境生效, 当有一个新的请求到达的时候,会创建一个bean实例
  • session : 当有一个新的会话的时候,会创建一个bean实例
  • application: 在项目的整个生命周期中,只有一个bean
  • globalsession : 有点类似于application,,但是这个是在portlet环境下使用

java配置scope使用@Scope() 注解

singleton和prototype区别:

  1. 如果scope为 singleton,spring在启动的时候会完成初始化,,
    如果是prototype是在每一次获取bean的时候初始化
  2. scope为prototype的bean的生命周期 和 singleton不同

条件注解

根据条件向spring容器中注册bean,,实现Condition接口,里面matches方法返回true表示,注入到容器中

public class JavaConfig {

    @Bean
    @Conditional(WindowCondition.class)
    ShowCmd winCmd(){
        return new WindowsCmd();
    }

    @Bean
    @Conditional(LinuxCondition.class)
    ShowCmd linuxCmd(){
        return new LinuxCmd();
    }

}

使用场景:

  1. 多环境切换
  2. springboot中自动配置

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

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

相关文章

最新AI智能聊天对话问答系统源码(详细图文搭建部署教程)+AI绘画系统(Midjourney),DALL-E3文生图,TTS语音识别输入,文档分析

一、文章前言 随着人工智能技术的持续进步&#xff0c;AI绘画已经发展成为一个日益成熟的领域。越来越多的人开始尝试使用AI绘画软件来创作艺术作品。尽管这些AI绘画软件对绘画领域产生了显著影响&#xff0c;但它们并不会完全取代画师。与传统手绘不同&#xff0c;AI绘画可以…

【AWS SMB】关于AWS 中小型企业 (SMB) 能力介绍及注意事项

文章目录 前言一、什么是 SMB&#xff1f;&#x1f4e2;二、如何识别中小企业的需求三、中小企业营销活动的类型四、AWS 合作伙伴可获得的其他 AWS 机会4.1 AWS IQ4.2 APN 客户参与 (ACE) 计划 前言 AWS 中小型企业 &#xff08;SMB&#xff09; 能力合作伙伴专注于帮助中小型…

JimuReport 积木报表 v1.7.6 版本发布,免费的低代码报表

项目介绍 一款免费的数据可视化报表工具&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完…

数据结构-算法和算法分析

目录 前言一、算法1.1 算法与程序1.2 算法描述方法1.3 算法特性1.4 算法设计的要求 二、算法分析2.1 算法时间效率的度量2.1.1 事前分析方法算法的渐进时间复杂度算法时间复杂度分析例子算法最坏时间复杂度时间复杂度的计算规则 2.2 算法空间效率的度量 总结 前言 程序 数据结…

18V-100V降5V1A恒压WT5117

18V-100V降5V1A恒压WT5117 WT5117 控制器是一个专为开关电源设计的高性能器件&#xff0c;它集成了一个能够承受高达 150V 电压的 MOSFET。这个控制器不仅支持快速启动&#xff0c;还具备低能耗待机模式&#xff0c;这得益于它的内置高压启动和自供电特性。为了在低负载条件下…

一个新的剪辑拼接图片和视频类APP在测试阶段需要测试内容,以iPhone APP为例:

1.UI参照原型图和设计稿 如有改动&#xff0c;需及时沟通 2.iPad转屏、不同iPhone和iPad机型测试 3.黑夜白天模式 2.各功能模块流程需要测试跑通 3.订阅支付模块 a. UI设计是否和设计稿一致 b.涉及订阅的位置都要测试 c.免费试用是否显示&#xff1b;试用结束后&#xff0c…

UnityAPI学习之碰撞检测与触发检测

碰撞检测 发生碰撞检测的前提&#xff1a; 1. 碰撞的物体需要有Rigidbody组件和boxcllidder组件 2. 被碰撞的物体需要有boxcollider组件 示例1&#xff1a;被碰撞的物体拥有Rigidbody组件 两个物体会因为都具有刚体的组件而发生力的作用&#xff0c;如下图所示&#xff0c…

【启明智显产品介绍】工业级HMI芯片Model3芯片详解(二)图像显示

Model3芯片是一款集大容量存储、宽温操作范围及多功能接口于一身的MCU&#xff0c;配备了 2D 图像加速引擎和 PNG 解码/JPEG 编解码引擎&#xff0c;可以满足各类交互设计场景和多媒体互动需求&#xff0c;具有高可靠性、高安全性、高开放度的特点&#xff0c;可以面向于泛工业…

Techviz:XR协作工作流程,重塑远程电话会议新形式

在当今快速发展的数字环境中&#xff0c;无缝远程协作的需求正在成为企业多部门协同工作的重中之重&#xff0c;尤其是对于制造业、建筑和设计等行业的专业人士而言&#xff0c;这一需求更加迫切。传统的远程电话会议协作形式存在着延滞性&#xff0c;已经渐渐跟不上当今快节奏…

场外个股期权通道业务是什么意思?

今天带你了解场外个股期权通道业务是什么意思&#xff1f;场外个股期权业务是指在沪深交易所之外进行的个股期权交易。它是一种非标准化的合约&#xff0c;不在交易所内进行交割。 场外个股期权通道业务&#xff0c;是指投资者通过与场外个股期权机构通道签订合约&#xff0c;购…

Docker私有化仓库Harbor安装流程

1.搭建Docker私有仓库主要有以下几种方式 使用Docker官方提供的Registry镜像&#xff1a;Docker官方提供了一个用于构建私有镜像仓库的Registry镜像&#xff0c;只需将镜像下载并运行容器&#xff0c;然后暴露5000端口即可使用。可以通过修改Docker的配置文件daemon.json&#…

SpringSecurity-入门代码

创建SpringBoot项目 参考文章&#xff1a; 【环境搭建】使用IDEA创建SpringBoot项目详细步骤_idea创建spring boot项目-CSDN博客 编写helloworld代码 RestController public class HelloController {GetMapping("/hello")public String hello(){return "hel…

手写月课表

农历插件&#xff1a;chinese-lunar-calendar - npm&#xff0c;这个插件可以计算农历日期和节气等 安装&#xff1a; npm install --save chinese-lunar-calendar 使用&#xff1a; import { getLunar } from chinese-lunar-calendar;let res getLunar(years, months, da…

4大利好因素释放顺风车市场潜力,嘀嗒出行即将登陆港交所

经历了十多年发展&#xff0c;共享出行行业即将迎来第一个上市公司——专注顺风车和智慧出租车的嘀嗒出行。 近日&#xff0c;嘀嗒出行通过了港交所聆讯&#xff0c;根据招股书&#xff0c;嘀嗒出行2023年顺风车搭乘次数和交易额分别为约1.3亿次和86亿元&#xff0c;同比分别增…

无监督医学图像翻译与对抗扩散模型| 文献速递-深度学习结合医疗影像疾病诊断与病灶分割

Title 题目 Unsupervised Medical Image Translation With Adversarial Diffusion Models 无监督医学图像翻译与对抗扩散模型 01 文献速递介绍 多模态成像对于全面评估人体解剖结构和功能至关重要[1]。通过各自模态捕获的互补组织信息&#xff0c;有助于提高诊断准确性并改…

安装免费版的jfrog artifactory oss

1、下载 软件&#xff0c;本案例安装的是 jfrog-artifactory-oss-7.59.11-linux.tar.gz https://releases.jfrog.io/artifactory/bintray-artifactory/org/artifactory/oss/jfrog-artifactory-oss/ 2、解压下载下来的压缩包 tar zxf jfrog-artifactory-oss-7.59.11-linux.tar…

护眼台灯选购:台灯怎么选对眼睛好?

如今孩子们的学习压力越来越大&#xff0c;熬夜学习已成常态&#xff0c;视力问题也日益凸显。尽管没有详细的地域数据&#xff0c;但整体而言&#xff0c;中国青少年的近视率已经高居世界第一位&#xff0c;且不同地区的近视率可能存在一定的差异。眼睛健康愈发受到关注&#…

探索数据分析无限潜能:vividime Desktop助力企业智能决策

在数字化浪潮席卷全球的今天&#xff0c;数据已经成为企业最宝贵的资产之一。通过对海量数据的深度挖掘和分析&#xff0c;企业能够洞察市场趋势、优化运营流程、提升用户体验&#xff0c;从而在激烈的市场竞争中脱颖而出。永洪科技的vividime Desktop作为一款功能强大、操作简…

Survival Animations

一套生存游戏的动画集,包括采集、建造、捕鱼、剥皮/鞣制、篝火等更多内容。 总动画数:89 建造/制作 30 篝火 28 饮水 3 水壶 3 觅食 2 治疗 3 空闲 1 原始捕鱼 7 剥皮 1 矛捕鱼 4 伐木 5 下载:​​Unity资源商店链接资源下载链接 效果图:

docker容器内部网络不通,宿主机有网

在docker容器中能ping www.baidu.com 但是curl www.baidu.com没有反应。 最终排查看到是mtu设置的问题。 MTU&#xff08; Maximum Transmission Unit&#xff0c;最大传输单位&#xff09;,用来设置描述网络接口的最大传输量&#xff0c;需要注意的是&#xff0c;每个网络接…