5.从IOC容器获取Bean & name和id的区别

两种方式,推荐使用第一种

复制代码
public class SpringApplication {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        Apple apple4 = context.getBean("apple4", Apple.class);
        System.out.println(apple4.getTitle());
        Apple apple3 = (Apple) context.getBean("apple3");
        System.out.println(apple3.getOrigin());
    }
}
复制代码

id和name的相同点:

 1.都是设置对象在IOC容器中的唯一标识

 2.两者在同一配置文件中都不允许出现重复

 3.两者允许在多个配置文件中出现重复,新对象覆盖旧对象

 4.都要使用驼峰命名法

id和name的区别:

 1.id一次只能定义一个对象标识,推荐使用id

 2.name一次能定义多个对象标识 

 

 ClassPathXMLApplicationContext允许加载多个文件,采用字符串数组的形式将XML文件书写其中,按字符串数组顺序加载applicationContext配置文件,如果两个applicationContext的name属性相同,则后加载的name会覆盖掉前面的name。

复制代码
<?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 name="apple2" class="com.example.s02.ioc.entity.Apple">
        <constructor-arg name="title" value="红富士"></constructor-arg>
        <constructor-arg name="color" value="红色"></constructor-arg>
        <constructor-arg name="origin" value="欧洲"></constructor-arg>
        <constructor-arg name="price" value="18.5"></constructor-arg>
    </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 name="apple2,apple7" class="com.example.s02.ioc.entity.Apple">
        <constructor-arg name="title" value="红富士2号"></constructor-arg>
        <constructor-arg name="color" value="红色"></constructor-arg>
        <constructor-arg name="origin" value="欧洲"></constructor-arg>
        <constructor-arg name="price" value="29.8"></constructor-arg>
    </bean>
</beans>
复制代码

 

复制代码
package com.example.s02.ioc;

import com.example.s02.ioc.entity.Apple;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringApplication {
    public static void main(String[] args) {
        String[] configLocations = new String[]{"applicationContext.xml","applicationContext-1.xml"};
        ApplicationContext context = new ClassPathXmlApplicationContext(configLocations);

        Apple apple2 = context.getBean("apple2", Apple.class);
        System.out.println(apple2.getTitle());
    }
}
复制代码

 

输出结果为红富士2号

 

当一个bean既没有id也没有name时,使用类名全称作为bean标识

复制代码
<bean class="com.example.s02.ioc.entity.Apple">
        <constructor-arg name="title" value="红富士"></constructor-arg>
        <constructor-arg name="color" value="红色"></constructor-arg>
        <constructor-arg name="origin" value="欧洲"></constructor-arg>
        <constructor-arg name="price" value="18.5"></constructor-arg>
    </bean>
复制代码
复制代码
public class SpringApplication {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        Apple apple = context.getBean("com.example.s02.ioc.entity.Apple", Apple.class);
        System.out.println(apple);
    }
}
复制代码

 

posted @   南风知君  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示