天津魔方网站建设,莱芜都市网最新招聘信息,营销管理网站,广西住房和城乡建设门户网站文章目录一、Spring容器演示——采用Spring配置文件管理Bean#xff08;一#xff09;创建Maven项目#xff08;二#xff09;添加Spring依赖#xff08;三#xff09;创建杀龙任务类#xff08;四#xff09;创建勇敢骑士类#xff08;五#xff09;采用传统方式让勇…
文章目录一、Spring容器演示——采用Spring配置文件管理Bean一创建Maven项目二添加Spring依赖三创建杀龙任务类四创建勇敢骑士类五采用传统方式让勇敢骑士完成杀龙任务六采用Spring容器让勇敢骑士完成杀龙任务1、创建日志属性文件2、创建Spring配置文件3、在Spring配置文件里创建Bean1创建杀龙任务Bean2创建勇敢骑士Bean4、创建新勇敢骑士测试类5、创建两个勇敢骑士Bean6、修改新勇敢骑士测试类一、Spring容器演示——采用Spring配置文件管理Bean
Spring容器其实就是一个Bean工厂在工厂里通过配置文件或配置类创建各种各样的Bean然后在Spring应用程序就可以按照名称或类型获取工厂里已经配置好的Bean。下面我们就通过一个具体的案例来了解Spring容器是如何工作的。创建Spring应用程序 - 骑士完成任务。
一创建Maven项目 创建Maven项目 - SpringDemo设置项目位置以及组ID 单击【Finish】按钮pomproject object model对项目的版本、依赖与插件进行管理 修改项目的Maven配置
二添加Spring依赖
Spring框架与JDK版本对应关系
Spring框架版本JDK版本6.0.xJDK 17-21预期5.3.xJDK 8-19预期5.2.xJDK8-155.1.xJDK8-125.0.xJDK8-104.3.xJDK6-8本博开发环境JDK11IntelliJ IDEA 2020最多支持JDK14因此只好使用Spring5.3.x版本 如果IntelliJ IDEA 2021就可以支持JDK17因此就可以使用Spring6.0.x版本 在Maven仓库里查找Spring框架https://mvnrepository.com 查看Spring Core 选择最新版本 - 5.3.25 添加到pom.xml文件的dependencies元素里如果没有下载到本地5.3.25将会显示红色 同理添加其他依赖
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdnet.huawei.spring/groupIdartifactIdSpringDemo/artifactIdversion1.0-SNAPSHOT/versiondependencies!--Spring核心--dependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion5.3.25/version/dependency!--Spring实体--dependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion5.3.25/version/dependency!--Spring容器--dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.25/version/dependency!--Spring Web--dependencygroupIdorg.springframework/groupIdartifactIdspring-web/artifactIdversion5.3.25/version/dependency!--Spring MVC--dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.3.25/version/dependency!--Spring测试--dependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion5.3.25/version/dependency!--单元测试--dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/versionscopetest/scope/dependency/dependencies
/project
打开Maven窗口单击刷新按钮就开始下载依赖包等待插件与依赖下载完成 可以查看本地Maven仓库里当前项目下载的有关Spring框架的依赖
三创建杀龙任务类
创建net.[name].spring.day01包然后在包里面创建SlayDragonQuest类
package net.huawei.spring.day01;/*** 功能杀龙任务类*/
public class SlayDragonQuest {public void embark() {System.out.println(执行杀龙任务……);}
}
四创建勇敢骑士类
在net.huawei.spring.day01包里创建BraveKnight类
package net.huawei.spring.day01;/*** 功能勇敢骑士类*/
public class BraveKnight {private String name; // 骑士姓名private SlayDragonQuest slayDragonQuest; // 杀龙任务public String getName() {return name;}public void setName(String name) {this.name name;}/*** 设置杀龙任务** param slayDragonQuest*/public void setSlayDragonQuest(SlayDragonQuest slayDragonQuest) {this.slayDragonQuest slayDragonQuest;}/*** 勇敢骑士执行任务*/public void embarkOnQuest() {System.out.print(勇敢骑士[ name ]); // 骑士留名slayDragonQuest.embark(); // 执行杀龙任务}
}
回顾一下传统方式怎么使用这两个类。需要我们自己通过new实例化两个类然后设置勇敢骑士对象的姓名和杀龙任务属性然后调用勇敢骑士执行任务的方法。
五采用传统方式让勇敢骑士完成杀龙任务
在test/java里创建net.huawei.spring.day01包然后在包里面创建TestBraveKnightOld类 package net.huawei.spring.day01;import org.junit.Test;/*** 功能采用传统方式测试勇敢骑士类*/
public class TestBraveKnightOld {Testpublic void testBraveKnight() {// 创建杀龙任务对象SlayDragonQuest slayDragonQuest new SlayDragonQuest();// 创建勇敢骑士对象BraveKnight braveKnight new BraveKnight();// 设置勇敢骑士属性braveKnight.setName(罗宾汉);braveKnight.setSlayDragonQuest(slayDragonQuest);// 调用勇敢骑士执行任务方法braveKnight.embarkOnQuest();}
} 运行测试方法testBraveKnight() 查看程序运行结果 出现这个问题要设置Java版本 三个地方的设置要保持一致然后再运行程序查看结果
六采用Spring容器让勇敢骑士完成杀龙任务
1、创建日志属性文件
在resources目录里创建log4j.properties
log4j.rootLoggerWARN, stdout, logfile
log4j.appender.stdoutorg.apache.log4j.ConsoleAppender
log4j.appender.stdout.layoutorg.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern%d %p [%c] - %m%n
log4j.appender.logfileorg.apache.log4j.FileAppender
log4j.appender.logfile.Filetarget/spring.log
log4j.appender.logfile.layoutorg.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern%d %p [%c] - %m%n2、创建Spring配置文件
在resources里创建xmlconfig目录然后在里面创建spring-config.xml 输入Spring配置文件名 单击【Configure application context】配置应用上下文 单击【Create new application context…】创建新的应用上下文注意应用上下文名称是可以修改的 单击【OK】按钮 在项目结构窗口里查看配置好的spring-config.xml
3、在Spring配置文件里创建Bean
1创建杀龙任务Bean
!--配置杀龙任务Bean--
bean idslayDragonQuest classnet.huawei.spring.day01.SlayDragonQuest/id属性 对应对象名可以任取然后在应用程序里我们可以通过这个id值从Spring容器中获取Bean对象。class属性 表明Bean对象是基于哪个类来实例化注意一定要包含包名。
2创建勇敢骑士Bean
!--配置勇敢骑士Bean--
bean idbraveKnight classnet.huawei.spring.day01.BraveKnight property namename value罗宾汉/ !-- RobinHood.setName(罗宾汉)-- property nameslayDragonQuest refslayDragonQuest/ !--RobinHood.setSlayDragonQuest(slayDragonQuest)--
/bean property元素给对象设置属性值name属性Bean对象的属性名ref属性Bean对象的属性值引用另一个Bean对象 勇敢骑士Bean通过property元素将杀龙任务Bean注入作为其属性。注意name属性值一定是BraveKnight类的属性名ref属性值是已定义的杀龙任务Bean的id值。
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd!--配置杀龙任务Bean--bean idslayDragonQuest classnet.huawei.spring.day01.SlayDragonQuest/!--配置勇敢骑士Bean--bean idbraveKnight classnet.huawei.spring.day01.BraveKnightproperty namename value罗宾汉/ !--braveKnight.setName(罗宾汉);--property nameslayDragonQuest refslayDragonQuest/ !--braveKnight.setSlayDragonQuest(slayDragonQuest);--/bean
/beans通过Spring配置文件创建了两个Bean对象它们之间存在依赖关系第一个Bean对象是第二个Bean对象的任务属性值。
4、创建新勇敢骑士测试类 在test/java/net.huawei.spring.day01里创建TestBraveKnightNew测试类 采用基于类路径的应用容器类 - ClassPathXmlApplicationContext package net.huawei.spring.day01;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 功能采用Spring容器测试勇敢骑士类* 作者华卫* 日期2023年02月14日*/
public class TestBraveKnightNew {private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器Bean工厂Before // 每次测试方法执行前都要执行的代码就放在此方法里public void init() {// 基于Spring配置文件创建应用容器context new ClassPathXmlApplicationContext(xmlconfig/spring-config.xml);// 提示用户System.out.println(Spring应用容器已创建~);}Testpublic void testBraveKnight() {// 根据名称从应用容器中获取勇敢骑士对象BraveKnight braveKnight (BraveKnight) context.getBean(braveKnight);// 勇敢骑士执行任务braveKnight.embarkOnQuest();}After // 每次测试方法执行后都要执行的代码就放在此方法里public void destroy() {// 关闭应用容器context.close();// 提示用户System.out.println(Spring应用容器已关闭~);}
} 代码说明首先通过Spring配置文件创建Spring应用容器然后就可以利用容器的getBean方法通过名称获取容器里的Bean对象然后调用该对象的方法。 运行测试方法testBraveKnight()查看结果 再次运行程序查看结果 根据名称从应用容器中获取勇敢骑士对象可能会报错因为配置文件里没有定义那个名称的Bean
5、创建两个勇敢骑士Bean 基于一个类可以创建多个对象因此在spring-config.xml文件里也可以基于同一个类创建多个Bean。 基于BraveKnight类再创建两个Beanid值分别为knight1和knight2。 在Spring配置文件里同一个Bean不能重复定义也就是说不允许两个Bean有相同的id值
6、修改新勇敢骑士测试类 获取新建的两个勇敢骑士Bean调用执行任务方法 执行testBraveKnight()测试方法查看结果 勇敢骑士Bean采用属性注入方式将杀龙任务Bean注入作为其属性。 初始化对象其实可以调用有参构造方法来设置属性的初始值对应到Spring的Bean工厂就还有一种注入方式叫做构造方法注入。同样地我们还是通过案例来演示如何通过构造方法来注入属性值。