cgb2105-day16 男娘i 2021-09-11 03:12 263阅读 0赞 ### 文章目录 ### * * 一,DI * * \--1,概述 * \--2,测试 * * 创建Dept类 * 创建User类 * 测试 * 二,SpringDI * * \--1, 创建Teacher类 * \--2, 创建Student类 * \--3, 创建核心配置文件,配置包扫描的路径 * \--4, 测试 * \--5,总结 * 三,MVC项目 * * \--1,需求 * \--2,项目结构 * \--3,制作前端网页 * \--4,制作启动类 * \--5,修改端口号 * \--6,创建Car类 * \--7,创建CarController类 * \--8,创建CarService接口 * \--9,创建CarServiceImpl实现类 * \--10,测试 ## 一,DI ## ### –1,概述 ### 依赖注入,前提是先使用注解@Component完成IOC 两个类(对象)间的关系,使用@Autowried完成DI ### –2,测试 ### #### 创建Dept类 #### package cn.tedu.pojo; import org.springframework.stereotype.Component; @Component//交给spring进行ioc public class Dept { public String name = "java研发部门"; @Override public String toString() { return "Dept{" + "name='" + name + '\'' + '}'; } } #### 创建User类 #### package cn.tedu.pojo; import org.springframework.stereotype.Component; @Component//交给spring进行ioc public class User { String name = "蔡徐坤"; //描述User类和Dept类的关系 private Dept d; public void setD(Dept d) { this.d = d; } public Dept getD() { return d; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", d=" + d + '}'; } } #### 测试 #### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70] package cn.tedu.di; import cn.tedu.pojo.Dept; import cn.tedu.pojo.User; public class Test1 { public static void main(String[] args) { User u = new User(); //先设置部门信息,否则永远获取的是null u.setD(new Dept()); //获取用户的部门信息 Dept dept = u.getD(); //获取部门名称 System.out.println(dept.name); } } ## 二,SpringDI ## ### –1, 创建Teacher类 ### package cn.tedu.vo; import org.springframework.stereotype.Component; @Component//ioc public class Teacher { public String name = "jack" ; @Override public String toString() { return "Teacher{" + "name='" + name + '\'' + '}'; } } ### –2, 创建Student类 ### package cn.tedu.vo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component//ioc public class Student { public String name = "蔡徐坤" ; // 表示两个类之间的关系 @Autowired//DI依赖注入,自动装配,自动布线 Teacher t ; @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", t=" + t + '}'; } } ### –3, 创建核心配置文件,配置包扫描的路径 ### <?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"> <!--包扫描:扫描指定包路径下的所有类 哪些类有@Component注解,就帮哪些类new-ioc --> <context:component-scan base-package="cn.tedu.vo"></context:component-scan> </beans> ### –4, 测试 ### ![在这里插入图片描述][20210717113220615.png] package cn.tedu.di; import cn.tedu.vo.Student; import cn.tedu.vo.Teacher; import org.springframework.context.support.ClassPathXmlApplicationContext; //测试springdi public class Test2 { public static void main(String[] args) { //1,读取核心配置文件 ClassPathXmlApplicationContext spring = new ClassPathXmlApplicationContext( "spring-config.xml"); //2,根据类名,获取对象 //右侧返回的是Object父类,左侧要子类--需要强转--向下转型--是为了使用子类的功能 Teacher t = (Teacher) spring.getBean("teacher"); System.out.println(t);//Teacher{name='jack'} Student s = (Student) spring.getBean("student"); //DI:在获取学生信息的同时,也获取到了关联的老师信息 System.out.println(s);//Student{name='蔡徐坤', t=Teacher{name='jack'}} } } ### –5,总结 ### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 1] ## 三,MVC项目 ## ### –1,需求 ### 访问链接: http://localhost:8080/car/get 得到JSON数据: \{“name”:“保时捷”,“color”:“红色”,“price”:641000.0\} ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 2] ### –2,项目结构 ### cn.tedu — 放启动类,存子包 cn.tedu.service — 子包,放spring层的代码,接口 + 实现类 cn.tedu.controller — 子包,放springmvc的代码,controller负责接受请求做出响应 cn.tedu.pojo — 子包,放Model层的代码,用来封装数据 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 3] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 4] ### –3,制作前端网页 ### <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>测试 框架整合</title> </head> <body> <a href="http://localhost:8090/car/get">点我提交请求</a> </body> </html> ### –4,制作启动类 ### package cn.tedu; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication //启动类:@EnableAutoConfiguration // 默认开启包扫描,基于启动类所在的包 public class RunApp { public static void main(String[] args) { SpringApplication.run(RunApp.class); } } ### –5,修改端口号 ### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 5] ### –6,创建Car类 ### package cn.tedu.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import org.springframework.stereotype.Component; //lombok提供的注解, @Data//替代以前的get set tostring... @NoArgsConstructor//无参构造 @AllArgsConstructor//全参构造 @Accessors(chain = true)//开启链式编程 @Component //spring提供的ioc public class Car { private Integer id; private String name; private String type; private String color; private Double price; } ### –7,创建CarController类 ### package cn.tedu.controller; import cn.tedu.pojo.Car; import cn.tedu.service.CarServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController //接受请求 @RequestMapping("car")//规定了url和类的匹配方式 public class CarController { @Autowired //描述两个类的关系 di private CarServiceImpl carService; //规定了url和方法的匹配方式 @RequestMapping("get") public Car get(){ // return 调用service层的方法返回数据??? ; return carService.get() ; } } ### –8,创建CarService接口 ### package cn.tedu.service; import cn.tedu.pojo.Car; //接口里的方法都是抽象方法,都可以简写,都是public的 public interface CarService { //public abstract Car get(); Car get();//获取汽车数据 } ### –9,创建CarServiceImpl实现类 ### package cn.tedu.service; import cn.tedu.pojo.Car; //实现类用来实现接口,而且可以多实现 @Service//和@Component一样就是ioc的功能 public class CarServiceImpl implements CarService{ //实现类实现接口后,要重写抽象方法,否则是一个抽象类 //重写:子类的权限>=父类的权限 @Override public Car get(){ Car c = new Car(); //lombok提供的链式编程 c.setId(10).setPrice(19.9).setColor("red").setName("BMW").setType("X6"); return c; } } ### –10,测试 ### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 6] 启动服务器 ![在这里插入图片描述][20210717161145887.png] 打开网页访问服务器,服务器成功返回了数据 ![在这里插入图片描述][20210717161156818.png] ![在这里插入图片描述][20210717161207649.png] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70]: /images/20210911/97b0b4ccb8aa4961b247ebcd84c0d72e.png [20210717113220615.png]: /images/20210911/dc1fd82a6de84a22bd37306e244fcd84.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 1]: /images/20210911/c6f2e856dedf4f438b806a6077173c38.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 2]: /images/20210911/e549250df30c41f4a76bd635a98503da.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 3]: /images/20210911/a7a9b2c01e7b4a19b28e5a2751fea483.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 4]: /images/20210911/3ab2bbb64bd042a6a803244cb0e34c43.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 5]: /images/20210911/76d9c282baa946f880847d16cd09673b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 6]: /images/20210911/68c2cf8787bd4481ab99fdfad1cfc22a.png [20210717161145887.png]: /images/20210911/f8c8ee01b3994714964e359aedd35269.png [20210717161156818.png]: /images/20210911/bcf85b02df064c42895bdaba33409a87.png [20210717161207649.png]: /images/20210911/d6f9ea44f0444286953643c396447583.png
相关 cgb2105-day12 文章目录 一,Spring Boot \--1,创建Spring Boot项目 \--2,配置maven ╰半橙微兮°/ 2021年09月11日 03:10/ 0 赞/ 328 阅读
相关 cgb2105-day09 文章目录 一,js的语句 二,js的数组 三,js的函数 四,Maven \--1,创建Mave 心已赠人/ 2021年09月11日 03:04/ 0 赞/ 352 阅读
相关 cgb2105-day08 文章目录 一,模拟 服务器 解析浏览器发来的数据 二,CSS选择器 三,练习HTML和CSS \--1,创建c 谁践踏了优雅/ 2021年09月11日 03:04/ 0 赞/ 293 阅读
还没有评论,来说两句吧...