Java阶段二Day14
复习前日知识点
SpringFramework版本
Spring
是一个生态,包含很多子模块,其中SpringFramework
是核心的基础模块,平时常说的Spring框架指的就是Spring Framework
,其他子模块也是自它的基础上衍生出来的
当前学习使用5.3.24版本,Spring6版本支持jdk17
SpringFramework核心
- IoC:控制反转思想,把对象的创建及其各个对象间的依赖维护交给第三方容器处理
- AOP:面向切面编程,AOP用来封装多个类的公共行为,将那些与业务无关的行为封装为一些公共类,减少重复代码,降低耦合度
SpringFramework创建工程
-
在 pom.xml 引入
SpringFramework
依赖<dependencies> <!-- 引入spring framework 的 context基础依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.24</version> </dependency> </dependencies>
-
定义类,类属性,方法
-
创建xml的配置文件:resources / xxx.xml ,通过
<bean>标签
指定创建对象<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 class="com.liner.spring.iocxml.User" id="user"></bean> </beans>
-
ApplicationContext
读取xxx.xml
文件信息,并创建loC容器,并创建对象和初始化ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
-
通过
context.getBean(“xxx”)
获取创建好的java bean对象Object obj = context.getBean("id属性值", 类名.class);
SpringFramework相关概念
- loC:控制反转的思想
- loC容器:负责Java bean对象的创建及初始化
- DI注入:为对象的属性赋值
- bean管理:利用xml配置文件,进行属性值注入
由Spring的loC容器创建的java对象,叫bean对象,和平时普通的java对象没有区别
bean对象的创建过程
xml配置文件中的标签
-
bean
标签,主要是创建java bean对象<bean id = "xxx" class = "xxx.xxx.xxx"></bean>
-
property
标签,通过set方法注入属性值<!-- 字面量值注入 --> <property name = "" value = ""></property> <!-- 空值null注入 --> <property name = ""> <null></null> </property> <!-- 属性值包含特定符号,xml实体方式 --> <property name = "" value = "<xxx>"> </property> <!-- 属性值包含特定符号,CDATA区方式 --> <property name = ""> <value><![CDATA[<xxxxxx>]]]></value> </property>
-
constructor-arg
标签,通过构造器注入属性值<constructor-arg name = "" value = ""></constructor-arg>
基于XML管理bean
对象类型属性的注入
需要注入的数据类型为对象,而不是一个字面量
-
引入外部bean
通过在当前bean标签中通过
ref属性
引用外部bean的方式实现<!-- 外部bean--> <bean id="emp1" class="com.liner.spring.diobj.Emp"> <property name="eName" value="张三"/> <property name="salary" value="50000.0"/> <property name="dept" ref="dept1"/> </bean> <bean id="dept1" class="com.liner.spring.diobj.Dept"> <property name="dName" value="Java教研部"/> </bean>
-
内部bean
在需要注入对象的bean标签中内嵌 对象类型属性的 bean标签即可
<!-- 内部bean--> <bean id="emp2" class="com.liner.spring.diobj.Emp"> <property name="eName" value="李四"/> <property name="salary" value="1000.0"/> <property name="dept"> <bean class="com.liner.spring.diobj.Dept"> <property name="dName" value="销售部门"/> </bean> </property> </bean>
-
级联属性赋值(了解)
可以在标签中给需要注入对象的属性重新赋值
<!-- 级联属性--> <bean id="emp3" class="com.liner.spring.diobj.Emp"> <property name="eName" value="王五"/> <property name="salary" value="500.00"/> <property name="dept" ref="dept1"/> <!-- 级联属性赋值--> <property name="dept.dName" value="综合办公室"/> </bean> <bean id="dept1" class="com.liner.spring.diobj.Dept"> <property name="dName" value="Java教研部"/> </bean>
数组类型属性注入
使用 <array>标签
和<value>子标签
实现
<bean id="person1" class="com.liner.spring.diarray.Person">
<property name="name" value="于谦"/>
<property name="age" value="54"/>
<property name="hobby">
<!-- 数组类型属性注入 -->
<array>
<value>抽烟</value>
<value>喝酒</value>
<value>烫头</value>
</array>
</property>
</bean>
集合类型属性注入
-
list集合属性注入
使用
<property> 标签
下的<list>子标签
和<value> 子标签
实现<bean id="teacher1" class="com.liner.spring.dilistmap.Teacher"> <property name="tName" value="张三"/> <property name="studentList"> <list> <ref bean="student1"/> <ref bean="student2"/> </list> </property> </bean> <bean id="student1" class="com.liner.spring.dilistmap.Student"> <property name="sName" value="李四"/> <property name="age" value="12"/> </bean> <bean id="student2" class="com.liner.spring.dilistmap.Student"> <property name="sName" value="王五"/> <property name="age" value="31"/> </bean>
-
Map集合属性注入
使用
<util> 标签
实现<bean id="stuMap" class="com.liner.spring.dilistmap.Student"> <property name="sName" value="孙悟空"/> <property name="age" value="12"/> <property name="teacherMap"> <map> <entry key="1" value="猪八戒"/> <entry> <key> <value>2</value> </key> <value>沙悟净</value> </entry> </map> </property> </bean>
-
引用集合类型bean注入
使用
<property> 标签
下的<map>子标签
和<entry> 子标签
实现。<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd"> <!-- 引用类型的bean--> <bean name="stuUtil" class="com.liner.spring.dilistmap.Student"> <property name="sName" value="小亮"/> <property name="age" value="52"/> <property name="teacherMap" ref="mapUtil"/> <property name="courseList" ref="listUtil"/> </bean> <util:list id ="listUtil"> <value>表演</value> <value>音乐</value> <value>形体</value> </util:list> <util:map id = "mapUtil"> <entry key="1" value="王五"/> <entry key="2" value="赵六"/> </util:map> </beans>
p命名空间
这也是一种注入方式,可以在xml中定义命名空间或者叫名称空间,可以简化xml代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
<bean id="studentp" class="com.liner.spring.dilistmap.Student"
p:age="12" p:sName="吉吉国王" p:courseList-ref="mapUtil" p:teacherMap-ref="listUtil">
</bean>
</beans>
引入外部属性文件
当前所有的配置和数据都在xml文件中,一个文件中有很多bean,修改和维护起来很不方便,生产环境中会把特定的固定值放到外部文件中,然后引入外部文件进行注入,比如数据库连接信息
-
pom.xml中引入数据库依赖
<!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> </dependency> <!-- 数据源,连接池依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency>
-
resources目录下创建外部属性文件,一般为
properties
格式,定义数据库信息,如:jdbc.properties
jdbc.user=root jdbc.password=root jdbc.url=jdbc://mysql://localhost:3306/spring jdbc.driver=com.mysql.cj.jdbc.Driver
-
创建spring配置文件
bean-jdbc.xml
,引入context的命名空间文章来源:https://www.toymoban.com/news/detail-439775.html<beans xmlns="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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 引入外部属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder> <!-- 完成数据库信息注入 --> <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> <property name="driverClassName" value="${jdbc.driver}"></property> </bean> </beans>
-
创建测试类文章来源地址https://www.toymoban.com/news/detail-439775.html
public class TestJdbc { // 外部文件属性引入测试用例 @Test public void demo02(){ ApplicationContext context = new ClassPathXmlApplicationContext("bean-jdbc.xml"); DruidDataSource druidDataSource = context.getBean("druidDataSource", DruidDataSource.class); System.out.println(druidDataSource.getUrl()); } }
到了这里,关于Java阶段二Day14的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!