spring01

embedded/2024/10/22 3:28:03/
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.ppmy.cn/embedded/51232.html

相关文章

datax图形化界面datax-web安装及使用

环境准备&#xff1a;需要先安装git和maven git安装可参考git的安装-CSDN博客 maven只需解压安装包&#xff0c;配置环境变量即可使用 1 源代码下载 直接从Git上面获得datax-web源代码 git clone https://gitee.com/WeiYe-Jing/datax-web.git 2 打包项目 进入项目源码根…

Scrapy 爬虫框架:原理与使用指南

文章目录 引言Scrapy 原理1. 引擎&#xff08;Scrapy Engine&#xff09;2. 调度器&#xff08;Scheduler&#xff09;3. 下载器&#xff08;Downloader&#xff09;4. 爬虫&#xff08;Spiders&#xff09;5. 项目管道&#xff08;Pipeline&#xff09; Scrapy 使用指南1. 安装…

2024.6.23【BioChat】| 生物研报

日期&#xff1a;2024年6月23日 编辑&#xff1a;穆易青 生物信息学与生物技术领域最新进展 摘要 本报告汇总了近期在生物信息学和相关生物技术领域的主要研究进展&#xff0c;包括药物发现、量子生物学、睡眠医学、农业技术和植物基因组学等。这些研究不仅推动了科学理论的…

Java基础的重点知识-05-Scanner、Random、ArrayList类

文章目录 Scanner类Random类ArrayList类 Scanner类 一个可以解析基本类型和字符串的简单文本扫描器。 当我们要使用一个java.uitl包中的类的时候我们就需要导包。 想要用什么类就要进行导包 import java.util.Scanner;public class Main {public static void main(String[] …

项目总结-前端路由hash和history

项目总结-前端路由hash和history router模块 路由需要实现的功能 当浏览器地址发生变化的时候&#xff0c;切换页面点击浏览器后退前进的时候&#xff0c;网页内容发生变化刷新浏览器&#xff0c;网页加载当前路由对应内容 路由主要是通过监听事件&#xff0c;并利用js实现…

中断的输入和悬起行为

关于中断的输入和悬起行为&#xff0c;下列描述错误的是() A、当某中断的服务例程开始执行时&#xff0c;其悬起位会被硬件自动清除。 B、如果在某个中断得到响应之前&#xff0c;其悬起状态被清除了&#xff0c;则中断取消。 C、中断服务例程不可以在执行过程中把自己对应的中…

Windows环境利用 OpenCV 中 CascadeClassifier 分类器识别人眼 c++

Windows环境中配置OpenCV 关于在Windows环境中配置opencv的说明&#xff0c;具体可以参考&#xff1a;VS2022 配置OpenCV开发环境详细教程。 CascadeClassifier 分类器 CascadeClassifier 是 OpenCV 库中的一个类&#xff0c;它用于实现一种快速的物体检测算法&#xff0c;称…

windows11子系统Ubuntu 22.04.4子安装图形化界面

1、windows11家庭版本设置 打开虚拟机安装许可 2、Microsoft Store下载安装ubuntu 我使用的是22.04.4 LTS版本 3、 打开ubuntu 命令窗口 1、打开win11的命令行&#xff0c;在下拉三角下标&#xff0c;打开&#xff0c;可以看到有Ubuntu 的选项&#xff0c;点击即可进入linux命…