Spring之容器:IOC(2)

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
应用实时监控服务-应用监控,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【1月更文挑战第14天】7、实验六:为数组类型属性赋值8、实验七:为集合类型属性赋值①为List集合类型属性赋值②为Map集合类型属性赋值③引用集合类型的bean9、实验八:p命名空间10、实验九:引入外部属性文件7、实验六:为数组类型属性赋值8、实验七:为集合类型属性赋值①为List集合类型属性赋值②为Map集合类型属性赋值③引用集合类型的bean9、实验八:p命名空间10、实验九:引入外部属性文件

文章目录

前言

7、实验六:为数组类型属性赋值

8、实验七:为集合类型属性赋值

①为List集合类型属性赋值

②为Map集合类型属性赋值

③引用集合类型的bean

9、实验八:p命名空间

10、实验九:引入外部属性文件

总结


前言

7、实验六:为数组类型属性赋值

8、实验七:为集合类型属性赋值

①为List集合类型属性赋值

②为Map集合类型属性赋值

③引用集合类型的bean

9、实验八:p命名空间

10、实验九:引入外部属性文件

7、实验六:为数组类型属性赋值

8、实验七:为集合类型属性赋值

①为List集合类型属性赋值

②为Map集合类型属性赋值

③引用集合类型的bean

9、实验八:p命名空间

10、实验九:引入外部属性文件


7、实验六:为数组类型属性赋值

①修改Student类

在Student类中添加以下代码:

privateString[] hobbies;
publicString[] getHobbies() {
returnhobbies;
}
publicvoidsetHobbies(String[] hobbies) {
this.hobbies=hobbies;
}

②配置bean

<beanid="studentFour"class="com.gedeshidai.spring.bean6.Student"><propertyname="id"value="1004"></property><propertyname="name"value="赵六"></property><propertyname="age"value="26"></property><propertyname="sex"value="女"></property><!-- ref属性:引用IOC容器中某个bean的id,将所对应的bean为属性赋值 --><propertyname="clazz"ref="clazzOne"></property><propertyname="hobbies"><array><value>抽烟</value><value>喝酒</value><value>烫头</value></array></property></bean>

8、实验七:为集合类型属性赋值

①为List集合类型属性赋值

在Clazz类中添加以下代码:

privateList<Student>students;
publicList<Student>getStudents() {
returnstudents;
}
publicvoidsetStudents(List<Student>students) {
this.students=students;
}

配置bean:

<beanid="clazzTwo"class="com.gedeshidai.spring6.bean.Clazz"><propertyname="clazzId"value="4444"></property><propertyname="clazzName"value="Javaee0222"></property><propertyname="students"><list><refbean="studentOne"></ref><refbean="studentTwo"></ref><refbean="studentThree"></ref></list></property></bean>

若为Set集合类型属性赋值,只需要将其中的list标签改为set标签即可

②为Map集合类型属性赋值

创建教师类Teacher:

packagecom.gedeshidai.spring6.bean;
publicclassTeacher {
privateIntegerteacherId;
privateStringteacherName;
publicIntegergetTeacherId() {
returnteacherId;
    }
publicvoidsetTeacherId(IntegerteacherId) {
this.teacherId=teacherId;
    }
publicStringgetTeacherName() {
returnteacherName;
    }
publicvoidsetTeacherName(StringteacherName) {
this.teacherName=teacherName;
    }
publicTeacher(IntegerteacherId, StringteacherName) {
this.teacherId=teacherId;
this.teacherName=teacherName;
    }
publicTeacher() {
    }
@OverridepublicStringtoString() {
return"Teacher{"+"teacherId="+teacherId+", teacherName='"+teacherName+'\''+'}';
    }
}

在Student类中添加以下代码:

privateMap<String, Teacher>teacherMap;
publicMap<String, Teacher>getTeacherMap() {
returnteacherMap;
}
publicvoidsetTeacherMap(Map<String, Teacher>teacherMap) {
this.teacherMap=teacherMap;
}

配置bean:

<beanid="teacherOne"class="com.atguigu.spring6.bean.Teacher"><propertyname="teacherId"value="10010"></property><propertyname="teacherName"value="大宝"></property></bean><beanid="teacherTwo"class="com.gedeshidaia.spring6.bean.Teacher"><propertyname="teacherId"value="10086"></property><propertyname="teacherName"value="二宝"></property></bean><beanid="studentFour"class="com.atguigu.spring6.bean.Student"><propertyname="id"value="1004"></property><propertyname="name"value="赵六"></property><propertyname="age"value="26"></property><propertyname="sex"value="女"></property><!-- ref属性:引用IOC容器中某个bean的id,将所对应的bean为属性赋值 --><propertyname="clazz"ref="clazzOne"></property><propertyname="hobbies"><array><value>抽烟</value><value>喝酒</value><value>烫头</value></array></property><propertyname="teacherMap"><map><entry><key><value>10010</value></key><refbean="teacherOne"></ref></entry><entry><key><value>10086</value></key><refbean="teacherTwo"></ref></entry></map></property></bean>

③引用集合类型的bean

<!--list集合类型的bean--><util:listid="students"><refbean="studentOne"></ref><refbean="studentTwo"></ref><refbean="studentThree"></ref></util:list><!--map集合类型的bean--><util:mapid="teacherMap"><entry><key><value>10010</value></key><refbean="teacherOne"></ref></entry><entry><key><value>10086</value></key><refbean="teacherTwo"></ref></entry></util:map><beanid="clazzTwo"class="com.atguigugu.spring6.bean.Clazz"><propertyname="clazzId"value="4444"></property><propertyname="clazzName"value="Javaee0222"></property><propertyname="students"ref="students"></property></bean><beanid="studentFour"class="com.gedeshidai.spring6.bean.Student"><propertyname="id"value="1004"></property><propertyname="name"value="赵六"></property><propertyname="age"value="26"></property><propertyname="sex"value="女"></property><!-- ref属性:引用IOC容器中某个bean的id,将所对应的bean为属性赋值 --><propertyname="clazz"ref="clazzOne"></property><propertyname="hobbies"><array><value>抽烟</value><value>喝酒</value><value>烫头</value></array></property><propertyname="teacherMap"ref="teacherMap"></property></bean>

使用util:list、util:map标签必须引入相应的命名空间

<?xmlversion="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">

9、实验八:p命名空间

引入p命名空间

<?xmlversion="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:util="http://www.springframework.org/schema/util"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">

引入p命名空间后,可以通过以下方式为bean的各个属性赋值

<beanid="studentSix"class="com.atguigu.spring6.bean.Student"p:id="1006"p:name="小明"p:clazz-ref="clazzOne"p:teacherMap-ref="teacherMap"></bean>

10、实验九:引入外部属性文件

①加入依赖

<!-- MySQL驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><!-- 数据源 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.15</version></dependency>

②创建外部属性文件

jdbc.user=root
jdbc.password=gedeshidai
jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
jdbc.driver=com.mysql.cj.jdbc.Driver

③引入属性文件

引入context 名称空间

<?xmlversion="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"></beans>
<!-- 引入外部属性文件 --><context:property-placeholderlocation="classpath:jdbc.properties"/>

注意:在使用 context:property-placeholder 元素加载外包配置文件功能前,首先需要在 XML 配置的一级标签 中添加 context 相关的约束。

④配置bean

<beanid="druidDataSource"class="com.alibaba.druid.pool.DruidDataSource"><propertyname="url"value="${jdbc.url}"/><propertyname="driverClassName"value="${jdbc.driver}"/><propertyname="username"value="${jdbc.user}"/><propertyname="password"value="${jdbc.password}"/></bean>

⑤测试

@TestpublicvoidtestDataSource() throwsSQLException {
ApplicationContextac=newClassPathXmlApplicationContext("spring-datasource.xml");
DataSourcedataSource=ac.getBean(DataSource.class);
Connectionconnection=dataSource.getConnection();
System.out.println(connection);
}

总结

以上就是Spring之容器:IOC(2)的相关知识点,希望对你有所帮助。

积跬步以至千里,积怠惰以至深渊。时代在这跟着你一起努力哦!

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
3天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
9天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
42 6
|
24天前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
45 2
|
24天前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
32 1
|
1月前
|
XML 缓存 Java
搞透 IOC、Spring IOC ,看这篇就够了!
本文详细解析了Spring框架的核心内容——IOC(控制反转)及其依赖注入(DI)的实现原理,帮助读者理解如何通过IOC实现组件解耦,提高程序的灵活性和可维护性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
1月前
|
前端开发 Java Docker
使用Docker容器化部署Spring Boot应用程序
使用Docker容器化部署Spring Boot应用程序
|
1月前
|
Java Docker 微服务
利用Docker容器化部署Spring Boot应用
利用Docker容器化部署Spring Boot应用
53 0
|
2月前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
1月前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
44 0