1、创建Spring应用程序 - 骑士完成任务

(一)创建Maven项目

  • 创建Maven项目 - SpringDemo,设置项目位置以及组ID

  • 单击.[Finsh]按钮

  • 修改maven位置

(二) 添加spring依赖

  • 将spring添加到pom.xml文件里

<?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>net.cch.spring</groupId><artifactId>SpringDemo</artifactId><version>1.0-SNAPSHOT</version><dependencies><!--Spring核心--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.20</version></dependency><!--Spring实体--><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.3.20</version></dependency><!--Spring容器--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.20</version></dependency><!--Spring Web--><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.3.20</version></dependency><!--Spring MVC--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.20</version></dependency><!--Spring测试--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.20</version></dependency><!--单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency></dependencies></project>
  • 打开Maven窗口
  • 单击刷新按钮,就开始下载依赖包
  • 插件与依赖下载完成

(三)创建杀龙任务

  • 创建net.llj.spring.day01包,然后在包里面创建SlayDragonQuest类
    下面展示一些 内联代码片
package net.cch.spring.day01;/*** 功能:杀龙任务类* 作者:cch* 时间:2022年6月4日*/
public class SlayDragonQuest {public void embark() {System.out.println("执行杀龙任务……");}}

(四) 创建勇敢骑士类

  • net.cch.spring.day01包里创建BraveKnight类

package net.cch.spring.day01;/*** 功能:勇敢骑士类* 作者:cch* 时间:2022年6月4日*/
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(); // 执行杀龙任务}}

(五)采用传统的方式然勇敢骑士完成杀龙任务

  • net.llj.spring.day01包下创建TestBraveKnightOld类
import net.cch.spring.day01.BraveKnight;
import net.cch.spring.day01.SlayDragonQuest;
import org.junit.Test;/*** 功能:采用传统方法测试勇敢骑士类* 作者:cch* 时间:2022年6月4日*/
public class TestBraveKnightOld {@Testpublic void testBraveKnight() {// 创建杀龙任务对象SlayDragonQuest slayDragonQuest = new SlayDragonQuest();// 创建勇敢骑士对象BraveKnight braveKnight = new BraveKnight();// 设置勇敢骑士属性braveKnight.setName("罗宾汉");braveKnight.setSlayDragonQuest(slayDragonQuest);// 调用勇敢骑士执行任务方法braveKnight.embarkOnQuest();}
}
  • 运行测试方法testBraveKnight()
  • 查看测试结果

(六)采用spring框架让勇敢骑士完成杀龙任务

1、创建日志属性文件

  • 在resources目录里创建log4j.properties
log4j.rootLogger=WARN, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

2、创建spring配置文件

  • 在resources里创建xmlconfig目录,然后在里面创建spring-config.xml

  • 输入Spring配置文件名
  • 在项目结构窗口里查看配置好的spring-config.xml

3、在Spring配置文件里创建Bean

(1)创建杀龙任务Bean

<!--杀龙任务Bean--><bean id="slayDragonQuest" class="net.cch.spring.day01.SlayDragonQuest"/>

(2)创建勇敢骑士Bean

<!--创建勇敢骑士Bean--><bean id="RobinHood" class="net.cch.spring.day01.BraveKnight"><property name="name" value="罗宾汉"/>  <!-- RobinHood.setName("罗宾汉")--><property name="slayDragonQuest" ref="slayDragonQuest"/>  <!--RobinHood.setSlayDragonQuest(slayDragonQuest)--></bean>

4、创建新勇敢骑士测试类

  • 在test/java/net.llj.spring.day01里创建TestBraveKnightNew测试类
package net.cch.spring.day01;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 功能: 测试勇敢骑士类* 作者: 陈春宏* 时间: 2022年06月4日*/
public class TestBraveKnightNew {private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器@Before // 每次测试方法执行前都要执行的代码public void init() {// 基于Spring配置文件创建应用容器context = new ClassPathXmlApplicationContext("xmlconfig/spring-config.xml");// 提示用户System.out.println("Spring应用容器已创建~");}@Testpublic void testBraveKnight() {// 根据名称从应用容器中获取勇敢骑士对象(配置文件里定义勇敢骑士Bean的id是"RobinHood")BraveKnight braveKnight = (BraveKnight) context.getBean("RobinHood");// 勇敢骑士执行任务braveKnight.embarkOnQuest();}@After // 每次测试方法执行后都要执行的代码public void destroy() {// 关闭应用容器context.close();// 提示用户System.out.println("Spring应用容器已关闭~");}}
  • 通过spring配置文件Spring容器,利用容器的getBean方法,通过名称获取Bean对象,然后调用该对象方法。
  • 测试方法public void testBraveKnight()
  • 根据名称从应用容器中获取勇敢骑士对象可能会报错,因为配置文件里没有定义那个名称的Bean
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/9a
  • 当然可以对上述代码进行异常处理。

5、创建两个勇敢骑士Bean

  • 基于一个类可以创建多个对象,因此,在spring-config.xml文件里,也可以基于同一个类创建多个Bean。
  • 基于BraveKnight类再创建两个Bean,id值分别为knight1和knight2。
  • 在Spring配置文件里,同一个Bean不能重复定义,也就是说不允许两个Bean有相同的id值

6、修改新勇敢骑士测试类

  • 获取新建的两个勇敢骑士Bean,调用执行任务方法,查看结果

(七)采用构造方法注入 方式注入属性

1、创建救美任务类

  • 在net.llj.spring.day01包里创建RescueDamselQuest类
package net.cch.spring.day01;/*** 功能: 就美任务类* 作者: 陈春宏* 时间: 2022年06月4日*/
public class RescueDamselQuest {public void embark() {System.out.println("执行救美任务……");}
}

2、创建骑士救美类

  • 在net.llj.spring.day01包里创建DamselRescuingKnight类
package net.cch.spring.day01;/*** 功能: 救美骑士类* 作者: 陈春宏* 时间: 2022年06月4日*/
public class RescueDamselKnight {private String name;private RescueDamselQuest rescueDamselQuest;/*** 有参构造方法** @param name* @param rescueDamselQuest*/public RescueDamselKnight(String name, RescueDamselQuest rescueDamselQuest) {this.name = name;this.rescueDamselQuest = rescueDamselQuest;}public void embarkOnQuest() {System.out.print("救美骑士[" + name + ']');rescueDamselQuest.embark();}
}
  • 通过构造方法来设置骑士的姓名与要执行的任务。

3、配置救美骑士Bean

  • 在spring配置文件里创建骑士救美Bean
<!--救美任务Bean--><bean id="rescueDamselQuest" class="net.cch.spring.day01.RescueDamselQuest"/><!--创建救美骑士Bean--><bean id="Galahad" class="net.cch.spring.day01.RescueDamselKnight"><constructor-arg value="格拉海德"/><constructor-arg ref="rescueDamselQuest"/></bean>

4、创建老的骑士救美测试类

  • 在test/java/net.llj.spring.day01包里创建TestRescueDamselKnightOld类
package net.cch.spring.day01;import org.junit.Test;/*** 功能: 测试骑士救美类* 作者: 陈春宏* 时间: 2022年06月4日*/
public class TestRescueDamselKnightOld {@Testpublic void testRescueDamselKnight() {// 创建救美任务对象RescueDamselQuest rescueDamselQuest = new RescueDamselQuest();// 创建救美骑士对象RescueDamselKnight rescueDamselKnight = new RescueDamselKnight("格拉海德", rescueDamselQuest);// 救美骑士执行任务rescueDamselKnight.embarkOnQuest();}
}
  • 运行测试救美骑士类,结果

5、创建新的骑士救美测试类

  • 在test/java/net.llj.spring.day01包里创建TestRescueDamselKnightNew类
package net.cch.spring.day01;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 功能: 通过spring容器测试骑士救美任务* 作者: 陈春宏* 时间: 2022年06月4日*/
public class TestRescueDamselKnightNew {private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器@Before // 每次测试方法执行前都要执行的代码public void init() {// 基于Spring配置文件创建应用容器context = new ClassPathXmlApplicationContext("xmlconfig/spring-config.xml");// 提示用户System.out.println("Spring应用容器已创建~");}@Testpublic void testRescueDamselKnight() {// 根据名称从应用容器里获取救美骑士对象RescueDamselKnight rescueDamselKnight = (RescueDamselKnight) context.getBean("Galahad");// 救美骑士执行任务rescueDamselKnight.embarkOnQuest();}@After // 每次测试方法执行后都要执行的代码public void destroy() {// 关闭应用容器context.close();// 提示用户System.out.println("Spring应用容器已关闭~");}}
  • 测试方法,查看效果

Spring容器框架相关推荐

  1. 初识Spring Boot框架

    关注公众号[江南一点雨],专注于 Spring Boot+微服务以及前后端分离等全栈技术,定期视频教程分享,关注后回复 Java ,领取松哥为你精心准备的 Java 干货! 前面的铺垫文章已经连着写了 ...

  2. 超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享...

    超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 DI框架 Google-Guice入门介绍 转载于:https://www.cnblogs.com ...

  3. java 自动装载_java_详解Java的Spring框架下bean的自动装载方式,Spring容器可以自动装配相互协 - phpStudy...

    详解Java的Spring框架下bean的自动装载方式 Spring容器可以自动装配相互协作bean之间的关系,这有助于减少对XML配置,而无需编写一个大的基于Spring应用程序的较多的和元素. 自 ...

  4. dubbo框架中Main方法运行spring容器

    一:运行spring容器的方式有三种 1:使用tomcat.jetty等servlet容器运行 2:自己写一个Main方法运行 3:使用dubbo框架提供的Main方法运行 前面两种有一定的局限性,很 ...

  5. J2EE高级开发框架小课程之Spring框架2——Spring容器作用域,生命周期,Spring管理对象之间依赖关系

    Spring容器作用域 Spring创建对象的作用域:Spring在创建对象时,默认只创建一个(单例模式) scope: singleton(默认 单例) 构造器就一次,结果true prototyp ...

  6. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  7. 使用Spring容器

    1.BeanFactory BeanFactory可视为Spring的BeanFactory容器,它的主要功能是为依赖注入(Dependency Injection,DI)提供支持.这个容器接口在or ...

  8. springboot原生mysql写法_【Rainbond最佳实践】Spring Boot框架配置MySQL

    Rainbond开源软件介绍: Rainbond是国内首个开源的生产级无服务器PaaS. 深度整合基于Kubernetes的容器管理.多类型CI/CD应用构建与交付.多数据中心的资源管理等技术,提供云 ...

  9. web spring 容器

    使用spring的web应用时,不用手动创建spring容器,而是通过配置文件声明式地创建spring容器,因此,在web应用中创建spring容器有如下两种方式: 一.直接在web.xml文件中配置 ...

最新文章

  1. .exe已停止工作_这几天我遇到了前所未有的问题windows10 1809 explorer.exe资源管理器频繁崩溃...
  2. 更改Xamarin Android App名称
  3. 《ASP.NET 2.0开发指南》随书光盘 安装问题
  4. redis06----消息订阅
  5. sd-wan公司组网解决方案效果如何?
  6. 【造轮子】打造一个简单的万能Excel读写工具
  7. 初探 NS_STRING_ENUM
  8. flask执行python脚本_如何在flask后端运行python脚本?
  9. android 类ios actionsheet效果
  10. ubuntu 16.04 源码安装samba并且配置
  11. python37从零开始学_从零开始学Python【37】--朴素贝叶斯模型(理论部分)
  12. Illumina联手IBM Watson Health解读癌症基因谱
  13. ZMQ中线程之间发送命令
  14. 阿里巴巴前架构师 360 度无死角剖析微服务
  15. 可变车道怎么走不违章_可变车道怕走错扣分罚款,学学老司机的办法,新手司机学会不吃亏...
  16. 移动魔盒cm201-2原厂备份固件hitool刷机包hi3798mv300h
  17. HSQL 中修改字段的语法
  18. 数据挖掘算法学习及应用场景
  19. ANS.1编码详解(一)----基础语法和数据类型
  20. 在HTML中禁止IE缓存

热门文章

  1. 【FFmpeg】通过编解码ID(AV_CODEC_ID_*)获取编解码器AVCodec指针的过程分析
  2. Autofill安装使用
  3. mysql删除数据怎么回退_mysql 删除整个数据库
  4. oracle数据库在mybatis中的数值类型(NUMBER型)
  5. C++程序设计语言学习笔记:名字空间
  6. 对ARM紧致内存TCM的理解
  7. 再读杨绛_RWERWERWE_96921_新浪博客
  8. Quectel EC200A-CN移植
  9. 大学生英语竞赛大揭秘准备攻略
  10. android remoteviews 设置背景,理解RemoteViews