Spring中Bean的命名方式代码详解

本文主要描述的是关于spring中bean的命名方式,通过简单实例向大家介绍了六种方式,具体如下。

一般情况下,在配置一个Bean时需要为其指定一个id属性作为bean的名称。id在IoC容器中必须是唯一的,此外id的命名需要满足xml对id的命名规范。

在实际情况中,id命名约束并不会给我们带来影响。但是如果用户确实希望用到一些特殊字符来对bean进行命名,那么可以使用bean的name属性来进行命名,name属性没有字符上的限制,几乎可以使用任何字符。

每个Bean可以有一个或多个id,我们把第一个id称为“标识符”,其余id叫做“别名”,这些id在IoC容器中必须唯一。

首先来介绍一下Beanid的命名规则:

1.遵循XML命名规范
2.由字母,数字,下划线组成
3.驼峰式,首个单词字母小写,从第二个单词开始首字母大写。

接下来我们使用具体的例子来介绍Bean的不同命名方式

1.配置全限定类名,唯一

在示例中主要向大家输出问候信息,我们需要一个HelloWorld接口以及一个名称为HelloWorldImpl的实现类。接下来我们创建一个配置文件和一个程序的入口类。

首先在项目中创建包definition,接下来在包中创建HelloWorld接口:

public interface HelloWorld {
  public void sayHello();
} 

接下来我们创建HelloWorldImpl实现类:

public class HelloWorldImpl implements HelloWorld{
  public void sayHello() {
    System.out.println("Hello World");
  }
} 

接下来我们在配置文件中为HelloWorldImpl进行Bean的命名:

<bean class="cn.lovepi.chapter03.definition.HelloWorldImpl"/> 

我们在程序入口Mian.java来加载配置文件以及运行示例。

public static void sayHelloWorldByClass(){
  //使用FileSystemXmlApplicationContext加载配置文件信息
  BeanFactory beanFactory=
     new FileSystemXmlApplicationContext("src/conf/conf-definition.xml");
  //获取bean实例
  HelloWorld helloWorld=beanFactory.getBean(HelloWorldImpl.class);
  helloWorld.sayHello();
} 

在Main.java文件当中我们需要:

1.完成配置文件的加载以及SpringIoC容器的启动
 2.从容器中获得HelloWorldImpl实现类的实例
 3.输出问候信息

2.指定id,唯一

在配置文件中对bean进行配置

<bean id="HelloWorldById" class="cn.lovepi.chapter03.definition.HelloWorldImpl"/> 

修改Main程序入口,新建方法来调用bean

public static void sayHelloWorldById(){
  BeanFactory factory=
      new FileSystemXmlApplicationContext("src/conf/conf-definition.xml");
  HelloWorld helloWorld=factory.getBean("HelloWorldById",HelloWorldImpl.class);
  helloWorld.sayHello();
} 

3. 指定name,name为标识符,唯一

在配置文件中对bean进行配置

<bean name="HelloWorldByName" class="cn.lovepi.chapter03.definition.HelloWorldImpl"/> 

修改Main程序入口,新建方法来调用bean

public static void sayHelloWorldByName(){
  BeanFactory factory=
      new FileSystemXmlApplicationContext("src/conf/conf-definition.xml");
  HelloWorld helloWorld=factory.getBean("HelloWorldByName",HelloWorldImpl.class);
  helloWorld.sayHello();
} 

4.指定id和name,其中id为标识符,name为别名,唯一

在配置文件中对bean进行配置

<bean id="HelloWorldById01" name="HelloWorldByName01"
   class="cn.lovepi.chapter03.definition.HelloWorldImpl"/> 

修改Main程序入口,新建方法来调用bean

public static void sayHelloWorldByNameAndId(){
  BeanFactory factory=
      new FileSystemXmlApplicationContext("src/conf/conf-definition.xml");
  HelloWorld helloWorld01=factory.getBean("HelloWorldById01",HelloWorldImpl.class);
  HelloWorld helloWorld02=factory.getBean("HelloWorldByName01",HelloWorldImpl.class);
  helloWorld01.sayHello();
  helloWorld02.sayHello();
} 

5. 指定多个name,其中多个name需要用分号来进行分割,第一个name为标识符,其他的为别名,唯一

在配置文件中对bean进行配置

<bean name="bean1;alias01;alias02;alias03"
   class="cn.lovepi.chapter03.definition.HelloWorldImpl"/>
<bean id="bean2" name="alias11;alias12;alias13"
   class="cn.lovepi.chapter03.definition.HelloWorldImpl"/> 

修改Main程序入口,新建方法来调用bean

public static void sayHelloWorldByMutilName(){
  BeanFactory factory=
      new FileSystemXmlApplicationContext("src/conf/conf-definition.xml");
  HelloWorld helloWorld1=factory.getBean("bean1",HelloWorldImpl.class);
  HelloWorld helloWorld01=factory.getBean("alias01",HelloWorldImpl.class);
  HelloWorld helloWorld02=factory.getBean("alias02",HelloWorldImpl.class);
  HelloWorld helloWorld03=factory.getBean("alias03",HelloWorldImpl.class);
  helloWorld1.sayHello();
  helloWorld01.sayHello();
  helloWorld02.sayHello();
  helloWorld03.sayHello(); 

  HelloWorld helloWorld2=factory.getBean("bean2",HelloWorldImpl.class);
  HelloWorld helloWorld11=factory.getBean("alias11",HelloWorldImpl.class);
  HelloWorld helloWorld12=factory.getBean("alias12",HelloWorldImpl.class);
  HelloWorld helloWorld13=factory.getBean("alias13",HelloWorldImpl.class);
  helloWorld2.sayHello();
  helloWorld11.sayHello();
  helloWorld12.sayHello();
  helloWorld13.sayHello();
} 

6. 指定别名,使用alias标签来进行指定,唯一

在配置文件中对bean进行配置

<bean name="bean3" class="cn.lovepi.chapter03.definition.HelloWorldImpl"/>
<alias name="bean3" alias="alias21"/>
<alias name="bean3" alias="alias22"/> 

修改Main程序入口,新建方法来调用bean

public static void sayHelloWorldByAlias(){
  BeanFactory factory=
      new FileSystemXmlApplicationContext("src/conf/conf-definition.xml");
  HelloWorld helloWorld01=factory.getBean("bean3",HelloWorldImpl.class);
  HelloWorld helloWorld02=factory.getBean("alias21",HelloWorldImpl.class);
  HelloWorld helloWorld03=factory.getBean("alias22",HelloWorldImpl.class);
  helloWorld01.sayHello();
  helloWorld02.sayHello();
  helloWorld03.sayHello(); 

} 

利用别名命名时得先有一个唯一的名称(id和name都可以)

总结

以上就是本文关于Spring中Bean的命名方式代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

浅谈Spring中Bean的作用域、生命周期

Spring实例化bean的方式代码详解

Spring工厂方法创建(实例化)bean实例代码

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • Spring 3.x中三种Bean配置方式比较详解

    以前Java框架基本都采用了XML作为配置文件,但是现在Java框架又不约而同地支持基于Annotation的"零配置"来代替XML配置文件,Struts2.Hibernate.Spring都开始使用Annotation来代替XML配置文件了:而在Spring3.x提供了三种选择,分别是:基于XML的配置.基于注解的配置和基于Java类的配置. 下面分别介绍下这三种配置方式:首先定义一个用于举例的JavaBean. package com.chinalife.dao public cl

  • Spring学习笔记之bean的基础知识

    Bean: 在Spring技术中是基于组件的 最基本了是最常用的单元 其实实例保存在Spring的容器当中 Bean通常被定义在配置文件当中,Bean实例化由Spring的Ioc容器进行管理,Bean的实例可以通过Beanfactory进行访问,实际上大部分J2EE应用,Bean是通过ApplicationContext来访问的,ApplicationContext是BeanFactory的子接口,功能要比BeanFactory强大许多 在前面得博客依赖注入与控制反转中演示了应用spring实现

  • 浅谈Spring单例Bean与单例模式的区别

    Spring单例Bean与单例模式的区别在于它们关联的环境不一样,单例模式是指在一个JVM进程中仅有一个实例,而Spring单例是指一个Spring Bean容器(ApplicationContext)中仅有一个实例. 首先看单例模式,在一个JVM进程中(理论上,一个运行的JAVA程序就必定有自己一个独立的JVM)仅有一个实例,于是无论在程序中的何处获取实例,始终都返回同一个对象,以Java内置的Runtime为例(现在枚举是单例模式的最佳实践),无论何时何处获取,下面的判断始终为真: // 基

  • Spring中实例化bean的四种方式详解

    前言 在介绍Bean的实例化的方式之前,我们首先需要介绍一下什么是Bean,以及Bean的配置方式. 如果把Spring看作一个大型工厂,那么Spring容器中的Bean就是该工厂的产品.要想使用Spring工厂生产和管理Bean,就需要在配置文件中指明需要哪些Bean,以及需要使用何种方式将这些Bean装配到一起. Spring容器支持两种格式的配置文件,分别为Properties文件格式和xml文件格式,而在实际的开发当中,最常使用的额是xml文件格式,因此在如下的讲解中,我们以xml文件格

  • Spring @Bean vs @Service注解区别

    今天跟同事讨论了一下在Spring Boot中,是使用@Configuration和@Bean的组合来创建Bean还是直接使用 @Service等注解放在类上的方式.笔者倾向于使用第一种,即@Configuration和@Bean的组合. 先来看一个例子,目标是创建SearchService的一个Bean. 直接使用@Service的方式: // SearchService.java package li.koly.search; import java.util.List; public in

  • Spring循环依赖正确性及Bean注入的顺序关系详解

    一.前言 我们知道 Spring 可以是懒加载的,就是当真正使用到 Bean 的时候才实例化 Bean.当然也不全是这样,例如配置 Bean 的 lazy-init 属性,可以控制 Spring 的加载时机.现在机器的性能.内存等都比较高,基本上也不使用懒加载,在容器启动时候来加载bean,启动时间稍微长一点儿,这样在实际获取 bean 供业务使用时,就可以减轻不少负担,这个后面再做分析. 我们使用到 Bean 的时候,最直接的方式就是从 Factroy 中获取,这个就是加载 Bean 实例的源

  • spring入门教程之bean的继承与自动装配详解

    Spring之Bean的基本概念 大家都知道Spring就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.对于Spring容器能够生产那些产品,则取决于配置文件中配置. 对于我们而言,我们使用Spring框架所做的就是两件事:开发Bean.配置Bean.对于Spring矿建来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成"依赖注入". Bean的定义 <beans-/>元素是Spring配置文件的根元素,<bean-/&

  • Spring中如何动态注入Bean实例教程

    前言 在Spring中提供了非常多的方式注入实例,但是由于在初始化顺序的不同,基于标注的注入方式,容易出现未被正确注入成功的情况. 本文将介绍一种在实际项目中基于动态的方式来提取Spring管理的Bean. 下面话不多说了,来一起看看详细的介绍吧. 一.基于标注的方式注入实例 需要在Bean初始化之时,其依赖的对象必须初始化完毕.如果被注入的对象初始化晚于当前对象,则注入的对象将为null. 1.1 @Autowired 按照类型来加载Spring管理的Bean.默认情况下要求其Bean必须存在

  • Spring中Bean的命名方式代码详解

    本文主要描述的是关于spring中bean的命名方式,通过简单实例向大家介绍了六种方式,具体如下. 一般情况下,在配置一个Bean时需要为其指定一个id属性作为bean的名称.id在IoC容器中必须是唯一的,此外id的命名需要满足xml对id的命名规范. 在实际情况中,id命名约束并不会给我们带来影响.但是如果用户确实希望用到一些特殊字符来对bean进行命名,那么可以使用bean的name属性来进行命名,name属性没有字符上的限制,几乎可以使用任何字符. 每个Bean可以有一个或多个id,我们

  • Spring中bean集合注入的方法详解

    目录 Map注入 List注入 Set注入 数组注入 应用 哈喽大家好啊,我是Hydra. Spring作为项目中不可缺少的底层框架,提供的最基础的功能就是bean的管理了.bean的注入相信大家都比较熟悉了,但是有几种不太常用到的集合注入方式,可能有的同学会不太了解,今天我们就通过实例看看它的使用. 首先,声明一个接口: public interface UserDao { String getName(); } 然后定义两个类来分别实现这个接口,并通过@Component注解把bean放入s

  • Spring实例化bean的方式代码详解

    通过这篇文章通过实例代码向大家介绍了Spring实例化bean的几种方法,接下来看看具体内容吧. 1.使用类构造器实现实例化(bean的自身构造器) <bean id = "orderService" class="cn.itcast.OrderServiceBean"/> 2.使用静态工厂方法实现实例化 <bean id = "personService" class = "cn.itcast.OrderFactor

  • Spring自动装配与扫描注解代码详解

    1 javabean的自动装配 自动注入,减少xml文件的配置信息. <?xml version="1.0" encoding="UTF-8"?> <!-- 到入xml文件的约束 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p&quo

  • Spring实现处理跨域请求代码详解

    一次正常的请求 最近别人需要调用我们系统的某一个功能,对方希望提供一个api让其能够更新数据.由于该同学是客户端开发,于是有了类似以下代码. @RequestMapping(method = RequestMethod.POST, value = "/update.json", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody Contacter update(@RequestBody Contacter

  • springboot中使用redis的方法代码详解

    特别说明: 本文针对的是新版 spring boot 2.1.3,其 spring data 依赖为 spring-boot-starter-data-redis,且其默认连接池为 lettuce ​redis 作为一个高性能的内存数据库,如果不会用就太落伍了,之前在 node.js 中用过 redis,本篇记录如何将 redis 集成到 spring boot 中.提供 redis 操作类,和注解使用 redis 两种方式.主要内容如下: •docker 安装 redis •springboo

  • Spring中自定义数据类型转换的方法详解

    目录 类型转换服务 实现Converter接口 实现ConverterFactory接口 实现GenericConverter接口 环境:Spring5.3.12.RELEASE. Spring 3引入了一个core.onvert包,提供一个通用类型转换系统.系统定义了一个SPI来实现类型转换逻辑,以及一个API来在运行时执行类型转换.在Spring容器中,可以使用这个系统作为PropertyEditor实现的替代,将外部化的bean属性值字符串转换为所需的属性类型.还可以在应用程序中需要类型转

  • Spring静态代理和动态代理代码详解

    本节要点: Java静态代理 Jdk动态代理 1 面向对象设计思想遇到的问题 在传统OOP编程里以对象为核心,并通过对象之间的协作来形成一个完整的软件功能,由于对象可以继承,因此我们可以把具有相同功能或相同特征的属性抽象到一个层次分明的类结构体系中.随着软件规范的不断扩大,专业化分工越来越系列,以及OOP应用实践的不断增多,随之也暴露了一些OOP无法很好解决的问题. 现在假设系统中有三段完全相似的代码,这些代码通常会采用"复制"."粘贴"方式来完成,通过这种方式开发

  • Spring中@Async注解实现异步调详解

    异步调用 在解释异步调用之前,我们先来看同步调用的定义:同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果. 异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕,继续执行下面的流程.例如, 在某个调用中,需要顺序调用 A, B, C三个过程方法:如他们都是同步调用,则需要将他们都顺序执行完毕之后,过程才执行完毕: 如B为一个异步的调用方法,则在执行完A之后,调用B,并不等待B完成,而是执行开始调用C,待C执行完毕之后,就意味着这个过程执行完毕了. 概述说明 Sp

  • PHP验证码类文件及调用方式代码详解

    代码如下所示: //验证码类 class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子 private $code;//验证码 private $codelen = 4;//验证码长度 private $width = 130;//宽度 private $height = 50;//高度 private $img;//图形资源句柄 private $fon

随机推荐