Alias别名设置

可以为一个Bean的ID再设置一个ID

多一个可用标识,大概...

在获取实例注入参数时,两个标识都可以使用

除了Alias可以设置别名之外,Bean的标签本身也可以设置第二别名

name属性还可以设置多个别名,使用的分隔符没有限制

所以目前得出的结论是,别名标签是早期Spring设计出的一个功能,

但是在后面的版本被其他更强大的功能替代了,

所以放在现在看来,别名标签的用途似乎非常鸡肋

Import 多容器合并导入

在快速入门的测试类中,Spring官方给出的是一个多容器文件注入

其实多个容器文件可以使用此标签合并至一个容器中统一处理

实际的开发用途可以表现在多人协作开发中

依赖注入 Dependency Injection

依赖 即:对象的创建依赖于Spring容器实现

注入 即:对象的属性由Spring容器注入

三种方式:

  构造器注入

  Setter方法注入

  拓展方式注入

构造器注入

1、调用带参构造器注入值,name表示按参数的标识符注入

2、也可以按参数列表的形式,直接取参数的索引位置注入

3、根据参数的类型注入,如果定义多个同类型参数如何才能分辨呢?

4、根据引用来注入,此方式是引用Spring容器的其他Bean的ID

由于还未注册其他Bean,约束提示语法错误


Setter方法注入

设置一个新的实体类

package cn.dai.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set; /**
* @author ArkD42
* @file Spring
* @create 2020 - 05 - 04 - 19:38
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person { private String name;
private Address address;
private String[] books;
private List<String> hobbys;
private Map<String,Object> card;
private Set<String> game;
private String wife;
private Properties info;
}

里面基本包括了所有的数据类型

常用的数据类型

<property name="name" value="arkD42"/>

引用类型,被引用的类必须在Bean容器中注册才能被引用

<property name="address" ref="ads"/>

数组类型

<property name="books">
<array>
<value>编程思想 </value>
<value>高效的Java </value>
<value>Think in Java </value>
<value>C Prime Plus </value>
<value>TCP/IP Agreement</value>
</array>
</property>

List集合

<property name="hobbys">
<list>
<value>骑车</value>
<value>敲代码</value>
<value>学习</value>
</list>
</property>

Map集合

<property name="card">
  <map>
    <entry key="ID" value="336696219682038"/>
    <entry key="BankID" value="3365v234xcv2324xrw2343"/>
  </map>
</property>

空赋值

<property name="wife">
  <!-- 空字符串 <property name="wife" value="" /> -->
  <null/> <!-- <null></null> -->
</property>

Set集合

<property name="game">
  <set>
    <value>LOL</value>
    <value>CSGO</value>
    <value>COD</value>
  </set>
</property>

配置类

<property name="info">
  <props>
    <prop key="username">root</prop>
    <prop key="password">123456</prop>
  </props>
</property>

拓展方式注入

需要约束支持

xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"

实体类

package cn.dai.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; /**
* @author ArkD42
* @file Spring
* @create 2020 - 05 - 04 - 21:07
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String username;
private String password;
}

C命名【构造器命名注入】

可以使用C约束构造器参数注入

<bean id="user" class="cn.dai.pojo.User"
c:username="root" c:password="123456"/>

除了直接按参数标识符注入之外

构造器跟标签一样支持了

1、参数索引注入

2、引用类型注入【Bean注入】

P命名【字段命名注入】

可以使用P约束直接字段赋值注入

 <bean id="user" class="cn.dai.pojo.User"
p:username="root" p:password="123456"/>

P属于Setter方法注入,不是参数列表

但是也有引用式的Bean注入

P & C就是字段和构造器的简写

Spring称这是一种更为快捷的注入方式,

但是如果是复杂类型的数据注入,最好还是以XML标签的形式配置


Bean的作用域 Scope

Singleton单例模式

当一个bean的作用域为Singleton,那么Spring IoC容器中只会存在一个共享的bean实例,

并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。

Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象,

不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。

注意,Singleton作用域是Spring中的缺省作用域。

要在XML中将bean定义成singleton,可以这样配置:

Prototype 原型模式

当一个bean的作用域为Prototype,表示一个bean定义对应多个对象实例。

Prototype作用域的bean会导致在每次对该bean请求

(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)

时都会创建一个新的bean实例。

Prototype是原型类型,它在我们创建容器的时候并没有实例化,

而是当我们获取bean的时候才会去创建一个对象,

而且我们每次获取到的对象都不是同一个对象。

根据经验,对有状态的bean应该使用prototype作用域,

而对无状态的bean则应该使用singleton作用域。在XML中将bean定义成prototype,可以这样配置:

1、Scope属性默认是单例的,每次获取的都是同一个对象

2、原型模式每次从容器获取的都是不同的对象

3、其余的Session、Request、Application、Socket都是在Web应用中使用


自动装配、自动匹配 AutoWired

Spring可以依靠这一特性给对象自动的匹配属性

这也是Bean依赖的一种方式

三种自动装配方式:

1、XML显示配置

2、Java显示配置

3、缺省配置

测试环境:

猫类 & 狗类 & 人类

public class Cat {
public void meow(){
System.out.println("喵喵喵???");
}
}

public class Dog {
public void bark(){
System.out.println("汪汪汪???");
}
}

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private Cat cat;
private Dog dog;
private String name;
}

bean容器

<?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 id="cat" class="cn.dai.pojo.Cat"/>
<bean id="dog" class="cn.dai.pojo.Dog"/> <bean id="person" class="cn.dai.pojo.Person">
<property name="name" value="ajj" />
<property name="cat" ref="cat"/>
<property name="dog" ref="dog"/>
</bean>
</beans>

测试

public class AutoWiredTest {

    @Test
public void awt(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
Person person = applicationContext.getBean("person", Person.class);
System.out.println(person);
}
}

现在我们删掉对猫和狗类型的字段注入

尝试我们的自动装配来实现

<?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 id="cat" class="cn.dai.pojo.Cat"/>
<bean id="dog" class="cn.dai.pojo.Dog"/> <bean id="person" class="cn.dai.pojo.Person" autowire="byName">
<property name="name" value="ajj" />
</bean> </beans>

autowire="byName" 根据Bean的ID或者其别名进行自动装配

标识符能在容器中被查找到,匹配了和Person类的setter方法所注入的参数标识

将狗类的ID故意写错,Spring容器将无法识别到

autowire="byType" 根据类型自动查找,即是名称写错也会进行匹配

并正确的注入

但是ByType的问题就是,容器中不可以存在多个相同类型的Bean,

这对ByType来说造成了歧义

总而言之:

ByName 按Bean的标识 + 别名 进行匹配,

  必须和setter方法的参数标识一样,但是Bean可以设置多个

ByType 按Bean的类型 匹配

  必须保证容器的Bean是唯一的


【Spring】03 XML配置的更多相关文章

  1. spring的xml配置声明以及相应的问题处理

    spring的xml配置声明:  xml配置声明 Code 问题处理 问题1 xml报错: cvc-elt.1: Cannot find the declaration of element 'bea ...

  2. spring+mybaits xml配置解析----转

    一.项目中spring+mybaits xml配置解析 一般我们会在datasource.xml中进行如下配置,但是其中每个配置项原理和用途是什么,并不是那么清楚,如果不清楚的话,在使用时候就很有可能 ...

  3. spring中用xml配置构造注入的心得

    spring中用xml配置构造注入时,如果 <constructor-arg> 属性都是 ref ,则不用理会参数顺序 <constructor-arg ref="kill ...

  4. Spring 中 Xml配置文件属性的说明

    Xml配置文件属性的说明: <bean id="TheAction" ⑴ class="net.xiaxin.spring.qs.UpperAction" ...

  5. Spring,SpringMvc配置常见的坑,注解的使用注意事项,applicationContext.xml和spring.mvc.xml配置注意事项,spring中的事务失效,事务不回滚原因

    1.Spring中的applicationContext.xml配置错误导致的异常 异常信息: org.apache.ibatis.binding.BindingException: Invalid ...

  6. Spring 基于XML配置

    基于XML的配置 对于基于XML的配置,Spring 1.0的配置文件采用DTD格式,Spring2.0以后采用Schema格式,后者让不同类型的配罝拥有了自己的命名空间,使得配置文件更具扩展性.此外 ...

  7. spring ioc xml配置

    一个完整的spring xml配置:是把action,service,dao以及其它的资源性配置(如basedao)和公共性配置(如连接数据库)配置在resource.xml中,这样就有四个xml配置 ...

  8. spring 5.x 系列第3篇 —— spring AOP (xml配置方式)

    文章目录 一.说明 1.1 项目结构说明 1.2 依赖说明 二.spring aop 2.1 创建待切入接口及其实现类 2.2 创建自定义切面类 2.3 配置切面 2.4 测试切面 附: 关于切面表达 ...

  9. spring利用xml配置定时任务

    在开发中会经常遇到做定时任务的需求,例如日志定时清理与处理,数据信息定时同步等需求. 1.在spring中利用xml配置定时任务,如下 <!-- ftpiptv信息同步接口定时任务配置--> ...

  10. Spring 基于xml配置方式的AOP

    我们具体用代码来说明: 1.ArithmeticCalculator.java package com.proc; public interface ArithmeticCalculator { in ...

随机推荐

  1. 实例讲解多处理器下的计算机启动(xv6的启动过程)

    启动 启动方面的文章之前也写过,那是我的第一篇文章,本文在前文的基础之上完善,然后增加了多处理器启动的情况,废话不多说直接来看. 启动可以分为两种,一种为冷启动,是指计算机在关机状态下按 POWER ...

  2. 不好分类的好题Record

    这里装的是一些不太好分类的. problem 1 给你 \(n\) 个序列,第 \(i\) 个序列的长度为 \(m_i\),要求在每个序列中选择一个数,每种选法的代价为选择的 \(n\) 个数之和,请 ...

  3. C#.NET Framework 使用BC库(BouncyCastle) RSA 私钥签名 公钥验签(验证签名) ver:20230704

    C#.NET Framework 使用BC库(BouncyCastle) RSA 私钥签名 公钥验签(验证签名) ver:20230704 环境说明: .NET Framework 4.6 的控制台程 ...

  4. 找不到 .NETFramework,Version=v5.0 的引用程序集。要解决此问题,请为此框架版本安装开发人员工具包(SDK/目标包)或者重新定向应用程序。

    找不到 .NETFramework,Version=v5.0 的引用程序集.要解决此问题,请为此框架版本安装开发人员工具包(SDK/目标包)或者重新定向应用程序. visual studio 2019 ...

  5. Spring扩展——@Import注解

    引言 在Spring中有许多Enable开头的注解,比如以下常见注解 @EnableTransactionManagement @EanbleAsync @EnableCache @EnableAsp ...

  6. 【解决方案】Java 互联网项目中消息通知系统的设计与实现(上)

    目录 前言 一.需求分析 1.1发送通知 1.2撤回通知 1.3通知消息数 1.4通知消息列表 二.数据模型设计 2.1概念模型 2.2逻辑模型 三.关键流程设计 本篇小结 前言 消息通知系统(not ...

  7. InvalidOperationException Cannot modify ServiceCollection after application is built .Net6 异常

    背景 我用了一个叫Unchase.Swashbuckle.AspNetCore.Extensions的库来加强Swagger的文档,我一般写法是这样的: builder.Services.AddSwa ...

  8. STM32 学习:IAP 简单的IAP例子

    --- title: mcu-stm32-IAP-1-sample date: 2020-05-27 18:21:53 categories: tags: - iap - stm32 --- 章节概述 ...

  9. 扫描版PDF目录制作指南

    目前网上找到的扫描版的电子书往往没有目录,这使得阅读变得非常困难.本文总结我的经验,介绍快速制作扫描版 PDF 目录的方法,以便更轻松地阅读扫描版电子书. 本文首先介绍手动制作目录的方法,之后介绍如何 ...

  10. Apline部署K3s的Agent

    之前我们在Ubuntu上部署了K3s的Server节点(传送门),这次我们加入两台K3s的Agent节点搭建一个K3s的3节点工作环境. 需要准备好网络环境,确保三台VM之间是可以ping通的,设置好 ...