一,DI
依赖注入,前提是先使用注解@Component完成IOC
两个类(对象)间的关系,使用@Autowried完成DI
–1,实现步骤
这里没有创建spring-congfig.xml
创建Dept类
package cn.tedu.pojo;
import org.springframework.stereotype.Component;
@Component
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 ="mng";
//描述User和Dept类的关系
private Dept d;
public Dept getD() {
return d;
}
public void setD(Dept d) {
this.d = d;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", d=" + d +
'}';
}
}
测试
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 D = u.getD();
//获取取部门名称
System.out.println(D.name);//防止 null.name报错,设置第10行
}
}
二,SpringDI
–1, 创建Teacher类
package cn.tedu.pojo2;
import org.springframework.stereotype.Component;
@Component
public class Teacher {
public String name = "jack";
@Override
public String toString() {
return "Teacher{" +
"name='" + name + '\'' +
'}';
}
}
–2, 创建Student类
package cn.tedu.pojo2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Student {
public String name = "mng";
@Autowired//依赖注入,表示两个类之间的关系
private Teacher t;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", t=" + t +
'}';
}
}
–3, 创建核心配置文件,配置包扫描的路径
创建spring-congfig.xml
<?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.pojo2"></context:component-scan>
</beans>
Test2
package cn.tedu.di;
import cn.tedu.pojo2.Student;
import cn.tedu.pojo2.Teacher;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test2 {
public static void main(String[] args) {
//右侧返回的是Object,左侧
ClassPathXmlApplicationContext spring = new ClassPathXmlApplicationContext("spring-config.xml");
Teacher t = (Teacher) spring.getBean("teacher");
System.out.println(t);
//DI:在获取学生信息的同时,也获取到了关联的老师信息
Student s = (Student)spring.getBean("student");
System.out.println(s);
}
}
三,MVC项目
–1,需求
访问链接: http://localhost:8080/car/get
得到JSON数据: {“name”:“保时捷”,“color”:“红色”,“price”:641000.0}
–2,项目结构
cn.tedu — 放启动类,存子包
cn.tedu.service — 子包,放spring层的代码,接口 + 实现类
cn.tedu.controller — 子包,放springmvc的代码,controller负责接受请求做出响应
cn.tedu.pojo — 子包,放Model层的代码,用来封装数据
–3,制作前端网页
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试 </title>
</head>
<body>
<a href = "http://localhost:8080/hi/get"> 来</a>
</body>
</html>
–4,制作启动类
package cn.tedu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//启动类:默认开启包扫描
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class);
}
}
-5.创建Car类
package cn.tedu.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.stereotype.Component;
@Data
@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;
}
–6,创建CarController类
package cn.tedu.controller;
import cn.tedu.pojo.Car;
import cn.tedu.service.CarServiceImp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("hi")
@CrossOrigin
class CarController {
@Autowired
private CarServiceImp carService;
@RequestMapping("get")
public Car getController(){
return carService.get();
}
}
–7,创建CarService接口
package cn.tedu.service;
import cn.tedu.pojo.Car;
public interface CarService {
//获取汽车数据
//public abstract Car get(){
Car get();
}
–8,创建CarServiceImpl实现类
package cn.tedu.service;
import cn.tedu.pojo.Car;
import org.springframework.stereotype.Service;
@Service
public class CarServiceImp implements CarService{
@Override
public Car get() {
Car c =new Car();
c.setId(10).setPrice(9.9).setColor("red").setName("BWM").setType("x6");
return c;
}
}