1.导包

所有和spring有关的包(有mybatis包的忽略),后期会使用maven引入

2. 引入spring的配置文件

可命名为applicationContext-service.xml或spring.xml

  • 注意:这个文件要放在src目录下!
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="..." class="..."></bean> </beans>

3. 创建service层的类

接口:UserService.java

public interface UserService {
//获取信息的方法
public void getMsg(String msg);
}

实现类:UserServiceImpl.java

public class UserServiceImpl implements UserService {
@Override
public void getMsg(String msg) {
System.out.println(msg);
}
}

4. 修改配置文件

5. 运行代码

public class Demo {
public static void main(String[] args) {
//获取spring配置文件生成的对象
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
//通过bean的id,获取bean对象
UserServiceImpl userService = (UserServiceImpl)ac.getBean("userService");
//使用方法
userService.getMsg("Hello,Spring!");
}
}

运行结果:

6. 解析Spring运行原理

控制反转IOC:

7. Spring容器中管理的bean对象:单态VS原型

7.1 单态模式 singleton(单例模式)(默认)

public class Demo {
public static void main(String[] args) {
//获取spring配置文件生成的对象
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
//通过bean的id,获取bean对象
UserServiceImpl userService = (UserServiceImpl)ac.getBean("userService");
//比较连个对象的哈希值
System.out.println(userService.hashCode());
System.out.println("--------------------");
UserServiceImpl userService2 = (UserServiceImpl)ac.getBean("userService");
System.out.println(userService2.hashCode());
}
}

运行结果:

7.2 原型模式 prototype

在配置文件中对应的<bean>标签中添加 scope=prototype 属性

<bean id="userService" class="com.yd.service.impl.UserServiceImpl" scope="prototype"></bean>

运行7.1中的代码结果:

总结:

  • 当<bean>中加入scope="prototype",表示该对象使用原型模式
  • 当<bean>中加入scope="singleton",或不加该属性,表示该对象使用单态模式(单例模式)
  • 原型模式:每次获取的对象不是同一个对象
  • 单态(单例)模式:每次获取的对象是同一个对象

01-第一个Spring程序的更多相关文章

  1. 2、Spring的 IoC详解(第一个Spring程序)

    Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.在这句话中重点有两个,一个是IoC,另一个是AOP.今天我们讲第一个IoC. IoC概念 ...

  2. 【Spring学习笔记-2】Myeclipse下第一个Spring程序-通过ClassPathXmlApplicationContext加载配置文件

    *.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:# ...

  3. spring之第一个spring程序

    spring具体描述: 轻量级 IOC:依赖注入 AOP:面向切片编程 容器:spring是一个容器,包含并且管理应用的生命周期 框架 一站式 一.搭建spring开发环境 在eclipse中新建一个 ...

  4. Spring-02 第一个Spring程序

    Spring-02 第一个Spring程序 第一个Spring程序 1.导入依赖 <dependency> <groupId>org.springframework</g ...

  5. 第一个Spring程序HelloWorld

    对于初学者而言,任何理论化的讲解都比不上一个简单的HelloWorld,我们在学习Spring时也不外乎用最简单的HelloWorld程序来将这个灵活而又强大的轻量级框架推送到诸位面前.想要说明的是现 ...

  6. 我的第一个Spring程序

    1.程序结构 2.各个文件 ByeService.java package com.service; public class ByeService { private String name; pu ...

  7. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:第一个Spring程序

    1. 创建项目 在 MyEclipse 中创建 Web 项目 springDemo01,将 Spring 框架所需的 JAR 包复制到项目的 lib 目录中,并将添加到类路径下,添加后的项目如图 2. ...

  8. Spring学习之路三——第一个Spring程序(体会IoC)

    体会IoC:Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JN ...

  9. 【VBA编程】01.第一个VBA程序Hello world

    [程序1] 所有程序语言的开始都源于Hello world,那么我们也使用Hello world进行第一个VBA编程 新建Excle文件-----文件-------选项-----自定义功能区域---- ...

  10. 第一个Spring程序(DI的实现)

    一,依赖注入:Dependency Injection(DI)与控制反转(IoC),不同角度但是同一个概念.首先我们理解一点在传统方式中我们使用new的方式来创建一个对象,这会造成对象与被实例化的对象 ...

随机推荐

  1. lui - imageViewer - 图片查看器

    imageViewer - 图片查看器 ImageViewer Table Attributes 参数 说明 类型 可选值 默认值 urlList 图片列表 Array - [] onChange 图 ...

  2. 【SQL Server 】Having——聚合函数的筛选

    在SQL Server 中,有Having关键字. 它的作用是:因为Where关键字无法与聚合函数一起使用,所以Having子句可以在我们筛选分组后各自组成数据. 1 -- 筛选出成绩大于等于500的 ...

  3. vue v-model的原理

    关于v-model v-model 可以实现表单与data里的双向绑定 很多插件上可以在组件上使用v-model,他是如何实现的呢,其实v-model就是一个语法糖 <input v-model ...

  4. [2013年NOIP提高组] 积木大赛

    春春幼儿园举办了一年一度的"积木大赛".今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木 ...

  5. 全局 使用 stylus 变量

    首先 安装 啦 npm i stylus stylus-loader -D 之后 使用全局变量 然后在组件中引用改变量  -->没有用! 原因还没有在build/utils.js文件 全局引入 ...

  6. sqlsever中使用的 select top n在mysql 语句中如何更改

    string sqlSelect = "select top(3) ROW_NUMBER() over(order by UserTime) as Num,* from " + & ...

  7. base64格式上传图片方法

    function dataURItoBlob(dataURI) { const byteString = atob(dataURI.split(',')[1]); const mimeString = ...

  8. Thread的状态变更

    [需注意的是:运行中(Running)和就绪(Ready)并不是 Java 的线程状态] public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TI ...

  9. python中的异常类

  10. 项目:在wiki标记中添加无序列表(split、join巩固)

    # coding: utf-8 import pyperclip text = pyperclip.paste() lines = text.split("\n") for i i ...