cgb2107-day17

2024-08-22 06:58
文章标签 cgb2107 day17

本文主要是介绍cgb2107-day17,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一,IOC的xml方式--了解
      • --1,项目结构
      • --2,创建Hello类
      • --3,创建User类
      • --4,创建配置文件
      • --5,创建测试类
    • 二,IOC的注解方式--重点
      • --0,项目结构
      • --1,创建类
      • --2,配置包扫描
      • --3,测试
    • 三,模拟 DI依赖注入
      • --1,概述
      • --2,测试
        • 创建Emp类
        • 创建Dept 类
        • 创建测试类
    • 四,Spring提供的DI依赖注入
      • --1,创建UserInfo 类
      • --2,创建Order 类
      • --3,测试类
      • --4,总结
    • 扩展:SpringMVC源码里的核心方法

一,IOC的xml方式–了解

–1,项目结构

在这里插入图片描述

–2,创建Hello类

package cn.tedu.spring;public class Hello {public void hi(){System.out.println("hello springioc~");}
}

–3,创建User类

package cn.tedu.spring;public class User {public void eat(){System.out.println(123);}
}

–4,创建配置文件

<?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"><!--spring认为万物皆是bean,配置bean的位置,spring自动完成iocclass属性用来描述类的全路径, id属性用来作为bean的唯一标识scope="prototype"用来设置对象是多例的,默认是singleton单例的IOC底层是Map结构,Map<id的值,类的对象>,数据结类似: {"hello",new Hello()}spring只能用反射创建对象:{"hello",Class.forName("cn.tedu.spring.Hello").newInstance() }--><bean class="cn.tedu.spring.Hello" id="hello"></bean><bean class="cn.tedu.spring.User" id="user"></bean></beans>

–5,创建测试类

package cn.tedu.spring;
import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test1 {//测试IOC(创建类+配置类)@Test//junit单元测试方法:@Test void public 没有参数public void ioc(){//1,读取配置文件--参数是配置文件的路径ClassPathXmlApplicationContext spring =new ClassPathXmlApplicationContext("spring-config.xml");//2,获取spring创建好的对象--参数是配置文件里bean标签的id的值Object o = spring.getBean("hello");System.out.println(o);//cn.tedu.spring.Hello@43bc63a3Hello h = (Hello) o;h.hi();//单例对象:节省内存和时间,spring框架默认的创建单例对象的方式Hello h2 = (Hello) spring.getBean("hello");
//        System.out.println(o2);//cn.tedu.spring.Hello@43bc63a3h2.hi();//java.lang.ClassCastException:cn.tedu.spring.Hello cannot be cast to cn.tedu.spring.User//User uu = (User) spring.getBean("hello");//System.out.println(uu);Object o3 = spring.getBean("user");System.out.println(o3);//cn.tedu.spring.User@38425407//向下转型:把父类类型变成子类类型,目的要用子类的功能User u = (User) o3 ;u.eat();}
}

二,IOC的注解方式–重点

1, 创建类, 类上使用IOC的注解
2, 创建配置文件, 指定包扫描的路径
3, 直接getBean(“类名首字母要变成小写”)

spring认为万物皆是bean,配置bean的位置,spring自动完成ioc
class属性用来描述类的全路径, id属性用来作为bean的唯一标识
scope="prototype"用来设置对象是多例的,默认是singleton单例的
IOC底层是Map结构,Map<id的值,类的对象>,数据结类似: {"hello",new Hello()}
spring只能用反射创建对象:
{"hello",Class.forName("cn.tedu.spring.Hello").newInstance() }

–0,项目结构

在这里插入图片描述

–1,创建类

package cn.tedu.spring;import org.springframework.stereotype.Component;
@Component //用来让spring完成ioc {"person"=new Person()}
public class Student {public void study(){System.out.println("Student.study()");}
}
package cn.tedu.spring;
import org.springframework.stereotype.Component;@Component //用来让spring完成ioc {"person"=new Person()}
public class Person {public void show(){System.out.println("Person.show()");}
}

–2,配置包扫描

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!--包扫描:扫描 指定包 以及 子包里的所有资源,找到有IOC注解的类就进行newIOC的注解包括: @Component   @Service  @Controllerbase-package 用来指定包路径,范围越小越好,性能高--><context:component-scan base-package="cn.tedu"></context:component-scan></beans>

–3,测试

package cn.tedu.spring;import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test1 {//单元测试方法@Testpublic void ioc(){//1,读取配置文件---参数是配置文件的路径ClassPathXmlApplicationContext spring =new ClassPathXmlApplicationContext("spring.xml");//2,getBean()---参数是类名,首字母小写Object o = spring.getBean("person");System.out.println(o);//cn.tedu.spring.Person@7e5afaa6Object o1 = spring.getBean("student");System.out.println(o1);Object o2 = spring.getBean("animal");System.out.println(o2);}
}

三,模拟 DI依赖注入

–1,概述

维护了两个对象间的关系,方便在使用A的同时可以看到关联的B的数据

–2,测试

创建Emp类
package cn.tedu.di;public class Emp {String name = "吴谦";//绑定了两个类的关系--依赖private Dept d;//get setpublic Dept getD() {return d;}public void setD(Dept d) {this.d = d;}@Overridepublic String toString() {return "Emp{" +"name='" + name + '\'' +", d=" + d +'}';}
}
创建Dept 类
package cn.tedu.di;
public class Dept {String name = "java软件开发一部";@Overridepublic String toString() {return "Dept{" +"name='" + name + '\'' +'}';}
}
创建测试类
package cn.tedu.di;
import org.junit.Test;
public class TestDi {@Testpublic void di(){//1,创建对象Emp e = new Emp();Dept d = new Dept();//Emp{name='吴谦', d=null}System.out.println(e);//2,di维护了两个对象间的关系-set()e.setD(d);
//Emp{name='吴谦', d=Dept{name='java软件开发一部'}}System.out.println(e);}
}

四,Spring提供的DI依赖注入

–1,创建UserInfo 类

package cn.tedu.di2;import org.springframework.stereotype.Component;
@Component//ioc -- {"userInfo"=new UserInfo()}
public class UserInfo {String name="jack";@Overridepublic String toString() {return "UserInfo{" +"name='" + name + '\'' +'}';}
}

–2,创建Order 类

package cn.tedu.di2;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component//ioc--{"order"=new Order()}
public class Order {String name = "iphone13";//get set@Autowired //diprivate UserInfo ui;@Overridepublic String toString() {return "Order{" +"name='" + name + '\'' +", ui=" + ui +'}';}
}

–3,测试类

package cn.tedu.di2;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestDI {@Testpublic void di(){//1,读取配置文件ClassPathXmlApplicationContext spring =new ClassPathXmlApplicationContext("spring.xml");//2,getBean()--DI:获取A的同时也获取到B的信息Object o = spring.getBean("order");
//Order{name='iphone13',ui=UserInfo{name='jack'}}System.out.println(o);}
}

–4,总结

IOC: 控制翻转,Spring框架创建对象.
使用步骤: 1, 在类上使用注解@Component @Service @Controller 2, 配置包扫描
DI: 依赖注入,把两个对象之间的关系依赖.
使用步骤: 1, 先完成IOC 2, 用注解@Autowired

扩展:SpringMVC源码里的核心方法

在这里插入图片描述

这篇关于cgb2107-day17的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095563

相关文章

Day17_0.1基础学习MATLAB学习小技巧总结(17)——字符向量元胞数组

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。 素材来源“数学建模清风” 特此说明:本博客的内容只在于总结在使用matlab中的一些小技巧,并非教程,若想系统的学习MATLAB,也可以移步去链接中的视频,观看学习。也欢迎各位在留言区补充,纠错,讨论。 原素材和学习视频地址:MATLAB教程

鸿蒙开发入门day17-使用自定义能力

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,还请三连支持一波哇ヾ(@^∇^@)ノ) 目录 自定义能力概述 自定义能力分层 自定义能力导览 自定义节点 自定义节点概述 自定义占位节点 FrameNode RenderNode BuilderNode 自定义占位节点 NodeContainer和NodeController FrameNode

Lesson_for_java_day17--java中的IO流(IO基本流、键盘输入、管道流、文件及文件夹操作、Properties类、切割文件、记录软件运行次数)

IO基本流: 字符流:读操作:Reader 字符输入流 抽象类Reader r = new FileReader(File f);构造方法:FileReader(File file) ;FileReader(String fileName) ;方法://读取一个字符并以整数的形式返回(0~255),//如果返回-1已到输入流的末尾。int read() throws IOException

算法day17|如何求普通二叉树的众数

算法day17|如何求普通二叉树的众数 501的变式:普通二叉树的众数 501的变式:普通二叉树的众数 如果把二叉搜索树变成普通二叉树,我们该怎么思考呢?这个时候就要回到我一开始的思路了,用哈希表来解决问题。 class Solution {public:unordered_map<int,int> map;void traversal(TreeNode* root){if(

算法day17|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

算法day17|算法day17|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先 530.二叉搜索树的最小绝对差501.二叉搜索树中的众数236. 二叉树的最近公共祖先 530.二叉搜索树的最小绝对差 中间的逻辑有一点小绕,我第一次也做了20分钟左右才发现问题。具体代码如下: class Solution {public:int Mi

Day17_Dubbo

文章目录 Dubbo篇zookeeper和dubbo的关系知道什么是SPI嘛?为什么Dubbo不用JDK的SPI而是要自己实现?Dubbo 动态代理策略有哪些?RPC框架需要解决的问题?RPC的实现基础?RPC使用了哪些关键技术?RPC和Http有什么区别 ? / 既然有 HTTP 请求,为什么还要用 RPC 调用?RPC 与 REST如何实现一个 RPC 框架?说一下Dubbo的一次服务请

cgb2107-day18

文章目录 一,Spring AOP--1,概述--2,使用步骤--3,创建切面--4,测试创建启动类创建HelloController 类测试 二,两个框架的整合--1,需求--2,开发步骤0,项目结构1,RunApp启动类2,application.yml改端口3,Car类,封装数据4,CarService接口,定义抽象方法5,CarServiceImpl实现类,重写抽象方法6,CarC

cgb2107-day16

文章目录 一,练习前后端整合,包括入库--1,java代码--2,前端代码--3,测试--4,总结 二,SpringMVC框架解析post提交的请求参数--0,项目结构--1,准备表单--2,准备启动类--3,准备Controller类,解析请求数据--4,创建Student类,用来封装数据--5,测试--6,扩展:入库修改pom,添加jdbc的jar包创建数据库表创建StudentCont

cgb2107-day15

文章目录 一,SpringMVC框架--1,概述--2,入门案例项目结构创建启动类创建CarController类测试 二,springmvc框架解析请求参数--1,get方式解析复杂的参数创建Car类 --2,restful方式在IDEA里创建后端代码UserController 类在HB里创建前端html代码测试 练习:需求修改前端页面修改后端代码,创建类 --3,post方式准备表单

cgb2107-day14

文章目录 一,Maven--1,概述--2,使用步骤 二,在IDEA里用maven--1,创建Maven工程--2,配置maven--3,修改pom.xml文件,添加jar包的坐标--4,检查本地仓库5,常用的maven命令 三,Spring Boot--1,概述--2,项目结构--3,创建Spring Boot工程--4,给工程配置maven信息--5,spring boot的pom.xm