pom.xml内容解析:
!--1.当前maven工程的坐标-->
<groupId>com.dltt</groupId>
<artifactId>mvn_01_20230330</artifactId>
<version>1.0-SNAPSHOT</version>
<!--当前maven工程的打包方式:可选三个值
1.jar:表达这个工程是一个java工程
2.war:表示这个工程是一个web工程
3.pom:表示这个工程是管理其他工程的工程-->
<packaging>jar</packaging>
<!--配置文件,jdk相关配置-->
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<!-- 工程构建过程中读取源码是使用的编码集-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 使用dependency配置一个具体的依赖
junit单体测试框架-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- scope标签配置依赖的范围-->
<scope>test</scope>
</dependency>
spring容器的bean组件默认是通过构造方法进行实例化的
<bean id="dog1" class="com.dltt.team789.vo.Dog"></bean>
如果要使用有参构造方法,则需要使用constructor-arg标签来为属性赋值
其中index表示参数的位置(从0开始),value参数的值
<bean id="dog2" class="com.dltt.team789.vo.Dog"> <constructor-arg index="0" value="花花"></constructor-arg> </bean>
静态工厂方式实例化Bean组件
<bean id="product01" class="com.dltt.team789.vo.StaticFactory" factory-method="getProduct"/>
普通工厂方式实例化Bean组件,需要先实例化工厂类实例,在通过执行工厂类的方法创建产品对象并返回引用
<bean id="customFactory" class="com.dltt.team789.vo.CustomFactory"/> <!-- 配置工厂组件--> <bean id="product02" factory-bean="customFactory" factory-method="getProduct"/>
secope属性配置bean组件的作用域
1.singleton(默认):单实例 2.prototype:每次从容器容器获取bean主键时,都相当于执行了new xxx(),每次获取都是新的实例<bean id="dog3" class="com.dltt.team789.vo.Dog" scope="prototype"/>
bean的初始化和销毁方法
1.init 2.destroy <bean id="dog4" class="com.dltt.team789.vo.Dog" lazy-init="true" init-method="init" destroy-method="destroy"/>
import可以引入其他的配置文件,resource属性值为引入配置文件相对于主配置文件的相对路径
<import resource="applicationContext.xml"/>
lazy-init懒加载 仅当scope=singleton时有效
<bean id="dog5" class="com.dltt.team789.vo.Dog" scope="singleton" lazy-init="true"/>
Setter方式注入基本类型
使用property标签,name是setter方法的set之后的方法名 value是注入的值
<bean id="dog5" class="com.dltt.team789.vo.Dog"> <property name="daoName" value="富贵"/> </bean>
test测试
如何从spring容器中获取组件(类的实例) // 1.获取容器对象 ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml"); // 2.获取组件(对象) Dog dog1=(Dog)app.getBean("dog1"); dog1.eat(); Dog dog2=(Dog) app.getBean("dog2"); dog2.introduce();
<bean>注入
1.pom.xml导入maven配置文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>spring_02-1_DI</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!-- spring核心组件-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!-- spring 上下文 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</proj
2.注入外部bean
<bean id="dog" class="com.dltt.vo.Dog">
<property name="name" value="旺财"/>
<property name="age" value="5"/>
</bean>
<!-- 注入外部bean-->
<bean id="person" class="com.dltt.vo.Person">
<property name="name" value="张三"/>
<property name="dog" ref="dog"/>
</bean>
3.注入内部bean
<!-- 注入内部的bean ,内部声明的bean组件无法在外部的其他组件访问(不推荐)-->
<bean id="person1" class="com.dltt.vo.Person">
<property name="dog">
<bean id="dog2" class="com.dltt.vo.Dog">
<property name="name" value="毛毛"/>
<property name="age" value="2"/>
</bean>
</property>
</bean>
4.注入集合方式
4.1List 集合注入
property标签內嵌套list标签
基本类型值用value标签,使用type属性表明类型,内容写具体的值
其他组件使用<ref>标签,使用bean属性表明注入的组件id
如果是null值,则使用<null>标签即可
<bean id="person2" class="com.dltt.vo.Person">
<property name="likes">
<list>
<value type="java.lang.String">打篮球</value>
<ref bean="dog"/>
<null></null>
</list>
</property>
</bean>
4.2Map集合注入
注入元素是需要使用《entry》标签
如果键为其他组件这使用key-ref属性注入,如果为基本类型则使用key
如果为其他自减则使用value-ref属性注区,如果为基本类型则使用value
<bean id="person3" class="com.dltt.vo.Person">
<property name="map">
<map>
<entry key="aa" value="bb"/>
<entry key-ref="dog" value-ref="dog"/>
</map>
</property>
</bean>
实现自动装配
bean标签中的属性autowire,配置自动装配
常用的两个值
byName:根据属性名称注入,注入值bean的id值和类中属性名称一致
byType:根据属性类型注入,如果出现了多个重复的属性类型,则抛出异常
<bean id="emp" class="com.dltt.vo.Emp" autowire="byName"/>
<bean id="emp2" class="com.dltt.vo.Emp" autowire="byType"/>
<bean id="dept" class="com.dltt.vo.Dept">
<property name="dName" value="技术部"/>
</bean>