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);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!