一、Spring容器演示

采用Spring配置文件管理Bean

1、创建Maven项目


修改项目的Maven配置

2、添加Spring依赖
在Maven仓库里查找Spring框架(https://mvnrepository.com)



同上添加其他依赖

<?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.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>net.huawei.spring</groupId><artifactId>SpringDemo</artifactId><version>1.0-SNAPSHOT</version><dependencies><!--Spring核心--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.25</version></dependency><!--Spring实体--><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.3.25</version></dependency><!--Spring容器--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.25</version></dependency><!--Spring Web--><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.3.25</version></dependency><!--Spring MVC--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.25</version></dependency><!--Spring测试--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.25</version></dependency><!--单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies>
</project>

刷新并下载依赖

3、创建杀龙任务类
创建net.cxf.spring.day01包,然后在包里面创建SlayDragonQuest类

package net.cxf.spring.day01;/*** 功能:杀龙任务类* 作者:cxf* 日期:2023年02月14日*/
public class SlayDragonQuest {public void embark() {System.out.println("执行杀龙任务……");}
}

3、创建勇敢骑士类
在net.cxf.spring.day01包里创建BraveKnight类

package net.cxf.spring.day01;/*** 功能:勇敢骑士类* 作者:cxf* 日期:2023年02月14日*/
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(); // 执行杀龙任务}
}

5、采用传统方式让勇敢骑士完成杀龙任务

package net.cxf.spring.day01;import org.junit.Test;/*** 功能:采用传统方式测试勇敢骑士类* 作者:cxf* 日期:2023年02月14日*/
public class TestBraveKnightOld {@Testpublic void testBraveKnight() {// 创建杀龙任务对象SlayDragonQuest slayDragonQuest = new SlayDragonQuest();// 创建勇敢骑士对象BraveKnight braveKnight = new BraveKnight();// 设置勇敢骑士属性braveKnight.setName("罗宾汉");braveKnight.setSlayDragonQuest(slayDragonQuest);// 调用勇敢骑士执行任务方法braveKnight.embarkOnQuest();}
}

运行结果错误,解决方法



三个地方保持一致
6、采用Spring容器让勇敢骑士完成杀龙任务

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

创建Spring配置文件
在resources里创建xmlconfig目录,然后在里面创建spring-config.xml

输入Spring配置文件名



单击OK
在Spring配置文件里创建Bean

<?xml version="1.0" encoding="UTF-8"?>
<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--><bean id="slayDragonQuest" class="net.cxf.spring.day01.SlayDragonQuest"/><!--配置勇敢骑士Bean--><bean id="braveKnight" class="net.cxf.spring.day01.BraveKnight"><property name="name" value="罗宾汉"/><property name="slayDragonQuest" ref="slayDragonQuest"/></bean><bean id="knight1" class="net.cxf.spring.day01.BraveKnight"><property name="name" value="高文"/><property name="slayDragonQuest" ref="slayDragonQuest"/></bean><bean id="knight2" class="net.cxf.spring.day01.BraveKnight"><property name="name" value="加雷思"/><property name="slayDragonQuest" ref="slayDragonQuest"/></bean><!--配置救美任务Bean--><bean id="rescueDamselQuest" class="net.cxf.spring.day01.RescueDamselQuest"/><!--配置救美骑士Bean--><bean id="rescueDamselKnight" class="net.cxf.spring.day01.RescueDamselKnight"><constructor-arg value="格拉海德"/><constructor-arg ref="rescueDamselQuest"/></bean></beans>

创建新勇敢骑士测试类

package net.cxf.spring.day01;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 功能:采用Spring容器测试勇敢骑士类* 作者:cxf* 日期: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();BraveKnight knight1 = (BraveKnight) context.getBean("knight1");braveKnight.embarkOnQuest();BraveKnight knight2 = (BraveKnight) context.getBean("knight2");braveKnight.embarkOnQuest();}@After // 每次测试方法执行后都要执行的代码就放在此方法里public void destroy() {// 关闭应用容器context.close();// 提示用户System.out.println("Spring应用容器已关闭~");}
}


创建两个勇敢骑士Bean

修改新勇敢骑士测试类

7、采用构造方法注入方式注入属性值

package net.cxf.spring.day01;/*** 功能:救美任务类* 作者:* 日期:2023年02月15日*/
public class RescueDamselQuest {public void embark() {System.out.println("执行救美任务……");}
}

创建救美骑士类
在net.cxf.spring.day01包里创建RescueDamselKnight类

package net.cxf.spring.day01;/*** 功能:救美骑士类* 作者:华卫* 日期:2023年02月15日*/
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();}
}

创建旧救美骑士测试类
在test/java/net.cxf.spring.day01包里创建TestRescueDamselKnightOld类

package net.cxf.spring.day01;import org.junit.Test;/*** 功能:采用传统方式测试救美骑士类* 作者:cxf* 日期:2023年02月15日*/
public class TestRescueDamselKnightOld {@Testpublic void testRescueDamselKnight() {// 创建救美任务对象RescueDamselQuest rescueDamselQuest = new RescueDamselQuest();// 创建救美骑士对象RescueDamselKnight rescueDamselKnight = new RescueDamselKnight("格拉海德", rescueDamselQuest);// 救美骑士执行任务rescueDamselKnight.embarkOnQuest();}
}


配置救美骑士Bean

<!--配置救美任务Bean--><bean id="rescueDamselQuest" class="net.cxf.spring.day01.RescueDamselQuest"/><!--配置救美骑士Bean--><bean id="rescueDamselKnight" class="net.cxf.spring.day01.RescueDamselKnight"><constructor-arg value="格拉海德"/><constructor-arg ref="rescueDamselQuest"/></bean>

创建新救美骑士测试类
在test/java/net.cxf.spring.day01包里创建TestRescueDamselKnightNew类

package net.cxf.spring.day01;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 功能:采用Spring容器测试救美骑士类* 作者:* 日期:2023年02月15日*/
public class TestRescueDamselKnightNew {private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器(Bean工厂)@Before // 每次测试方法执行前都要执行的代码就放在此方法里public void init() {// 基于Spring配置文件创建应用容器context = new ClassPathXmlApplicationContext("xmlconfig/spring-config.xml");// 提示用户System.out.println("Spring应用容器已创建~");}@Testpublic void testRescueDamselKnight() {// 根据名称从应用容器中获取救美骑士对象RescueDamselKnight rescueDamselKnight = (RescueDamselKnight) context.getBean("rescueDamselKnight");// 救美骑士执行任务rescueDamselKnight.embarkOnQuest();}@After // 每次测试方法执行后都要执行的代码就放在此方法里public void destroy() {// 关闭应用容器context.close();// 提示用户System.out.println("Spring应用容器已关闭~");}
}

jjava企业级开发-01相关推荐

  1. JAVE EE 企业级开发之从零开始学JAVA【51CTO技术论坛】

    http://bbs.51cto.com JAVE EE 企业级开发之从零开始学JAVA         从零开始学JAVA?YES!本刊内容全部为午饭redking整理.撰写,所涉及内容均为原创,非 ...

  2. PHP企业级开发环境配置全攻略-IDE+SVN++(转)

    zend studio一直被认为是最好的php IDE,然而zend studio对javascript和css的支持一直很弱.刚刚发布的zend studio 8 加入了javascript调试的功 ...

  3. 【深入浅出imx8企业级开发实战 | 03】imx8qxp一键独立编译指南

    这是机器未来的第54篇文章 原文首发地址:https://robotsfutures.blog.csdn.net/article/details/126924015 <深入浅出i.MX8企业级开 ...

  4. 20150411--Dede二次开发-01

    20150411--Dede二次开发-01 目录 一.目前市场流行的电子商城系统 1 二.ecshop的介绍 1 三.安装 2 四.echsop 的目录结构 5 五.分析ecshop里面程序的架构 5 ...

  5. 网站开发和企业级开发有什么区别?

    经常看到Web开发.网站开发.企业级开发,以前很难分清楚它们之前有什么不同?以前也有个说法:Java比较适合企业级开发. 现在经验增加了一点,谈谈我的一点看法. Web开发:www访问的网页.网站,B ...

  6. Git仓库初始化_企业级开发原则

    Git仓库初始化_企业级开发原则 文章目录 1. 在远程github创建仓库 2. 在本地创建README.md测试WIKI文件 3. 创建.gitignore文件 4. 初始化git仓库 5. 工作 ...

  7. spring5企业级开发实战 pdf_终于总结出Spring全家桶+微服务设计模式+Netty+MySQL调优PDF...

    Spring源码深度解析(2020年1月第二版) Spring是一个源码开放的轻量级Java开发框架,旨在解决业务逻辑层和其他各层的松耦合问题! 自从2003年推出以来,Spring 逐渐发展成为事实 ...

  8. Egg Node.js 从小工坊走向企业级开发 #20

    Egg & Node.js 从小工坊走向企业级开发 #20 在 台灣 JSDC2017 開發者年會 和 IMWebConf 2017 的分享 Slide : 「Egg & Node.j ...

  9. C#企业级开发案例精解:用经典案例学通 NET技术

    C#企业级开发案例精解:用经典案例学通 NET技术 那位有这本书,我想购买 现在买不到 qq:312941559 转载于:https://www.cnblogs.com/hnxc345/archive ...

最新文章

  1. Swift的数组与OC中数组的区别
  2. .net core实践系列之短信服务-为什么选择.net core(开篇)
  3. 计算机如何用vb文本加密,信息加密与隐藏工具的设计与实现VB231
  4. SequoiaDB 系列之六 :源码分析之coord节点
  5. C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]
  6. [转载] 字符串太长 pep8_Python f字符串– PEP 498 –文字字符串插值
  7. 【Kafka】kafka 监控指标项
  8. 2006-我都做了什么!
  9. L1-029. 是不是太胖了-PAT团体程序设计天梯赛GPLT
  10. python语言的读法-就语法而言,Python 这个语言怎么样?
  11. 手机定位折腾记(1):安卓手机的网络定位与NetworkLocation.apk
  12. 玩游戏降频?跑分不行?给你的CPU降降压,提提速!
  13. python sha1加密字符串
  14. 智能名片为什么使用场景都是微信小程序?哪些新玩法值得一试?
  15. 中国国家地理高清晰的PDF书籍系列经典珍藏版
  16. AV1代码学习:encoder_encode函数
  17. Python A*算法的简单实现
  18. python数据采集仪_数据采集卡支持python么深入理解Python生成器(Generator)
  19. 【Java】并发模式
  20. ROS中一个关于时间的函数

热门文章

  1. 【Java IO模式】Java BIO NIO AIO总结
  2. Linux Kernel GFP_KERNEL
  3. linux删除指定的行
  4. 领航未来,2022 世界人工智能大会「元宇宙的数字原生进化」论坛等你来!
  5. 树莓派开机黑屏问题解决
  6. Discovering Relations among Named Entities from Large Corpora
  7. pandas表格-拆分Excel的单元格为多行,将多行数据汇聚到一行用分隔符号分开
  8. Java中的过滤器doFilter里的chain.doFilter()函数理解
  9. stm32中常见的通信协议之SPI
  10. 线性代数导论32——基变换和图像压缩