一,修改端口号
–1,创建application.yml文件
–2,创建数据
二,SpringBoot热部署
–1,添加jar包的依赖
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
–2,配置选项
组合键: ctrl + shift + alt + / 或者 ctrl + alt + a
–3,改完资源,直接build
三,Lombok
–1,概述
简化了POJO里的实体类的写法,不用自己写set get tostring…
–2,步骤
安装插件
settings–搜lombok–installed
添加jar包的依赖
<!--支持lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
修改POJO类
–去掉set get tostring
–给类上加lombok提供的注解
@Data:自动提供 get set tostring equals hashCode
@NoArgsConstructor:提供无参构造
@AllArgsConstructor:提供全参构造
@Accessors(chain = true) : 提供链式编程
package cn.tedu.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Arrays;
import java.util.Date;
//Model层,用来封装数据
//类里的属性名 ---和页面中 name属性的值 必须相同 !!!否则不会封装数据
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Student {
private String user ;
private Integer age ;
private Integer sex ;
private String[] hobby ; //保存了页面提价的多个爱好
private Integer edu;
//页面提交的日期都是String类型,需要自己变成Date类型,否则页面永远400错误
@DateTimeFormat(pattern="yyyy-MM-dd" )
private Date intime;
}
测试
Student st = new Student();
st.setAge(10);
st.setSex(1);
st.setSex(1);
st.setSex(1);
st.setSex(1);
st.setSex(1);
st.setSex(1);
//lombok提供的链式编程
st.setAge(10).setSex(1).getUser();
四,Spring的IOC
–1,概述
Inversion of Control,控制反转,是指把管理对象的权利交给spring框架。
–2,XML方式实现IOC
项目结构
创建类
package cn.tedu.spring;
public class Hello {
void hi(){
System.out.println("hello spring ioc~ ");
}
}
创建配置文件,配置类的信息
选中resources-右键-new-xml config…-spring config-输入文件名-回车
<?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">
<!-- 配置一个类的信息 id是bean的唯一标识 class是类的全路径
当配置完成时,spring框架自动ioc,帮你new 。
Map<String,Object> - { hello = new Hello() }
Map<String,Object> - { hello = Class.forName("cn.tedu.spring.Hello").newInstance() }
-->
<bean id="hello" class="cn.tedu.spring.Hello"></bean>
</beans>
读取配置文件,直接获取对象
package cn.tedu.test;
import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIOC {
//单元测试junit方法:@Test public void 没有参数
@Test
public void ioc(){
//读取配置文件--参数是文件的路径
ClassPathXmlApplicationContext spring =
new ClassPathXmlApplicationContext("spring-config.xml");
//获取对象--参数是配置文件里bean的id属性值
Object o = spring.getBean("hello");
System.out.println(o);//cn.tedu.spring.Hello@302552ec
//向下造型--专门用子类的资源
Hello h = (Hello) o ;
h.hi();
}
}
总结
–3,注解方式实现IOC
哪个类想让spring框架new,就在类上使用注解:@Component / @Service / @Controller
创建类,使用注解
package cn.tedu.spring2;
import org.springframework.stereotype.Component;
//Map<类名首字母要小写,类的对象> - {user=new User()}
@Component
public class User {
public void get(){
System.out.println("hello springioc");
}
}
创建配置文件,只需要指定包的路径
<?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注解的类,自动ioc
base-package需要指定一个包的路径
-->
<context:component-scan base-package="cn.tedu.spring2"></context:component-scan>
</beans>
读取配置文件,获取对象
package cn.tedu.test;
import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
//测试 注解开发
public class TestIOC2 {
@Test
public void ioc2(){
//1,读取核心配置文件
ClassPathXmlApplicationContext spring =
new ClassPathXmlApplicationContext(
"spring-config2.xml");
//2,getBean -- 参数是类名,但是首字母要变成小写才行
Object o = spring.getBean("user");
System.out.println(o);//cn.tedu.spring2.User@37d4349f
Object o2 = spring.getBean("userInfo");
System.out.println(o2);//cn.tedu.spring2.UserInfo@2805d709
}
}
总结
五,模拟IOC
–1,创建Bean类,描述类的信息
package cn.tedu.myioc;
//描述一个类的信息,spring把每个类当做一个bean
public class Bean {
private String beanName;//类的名字
private String beanPath;//类的全路径
//constructors
public Bean(){}
public Bean(String beanName, String beanPath) {
this.beanName = beanName;
this.beanPath = beanPath;
}
//get set tostring
public String getBeanName() {
return beanName;
}
public void setBeanName(String beanName) {
this.beanName = beanName;
}
public String getBeanPath() {
return beanPath;
}
public void setBeanPath(String beanPath) {
this.beanPath = beanPath;
}
@Override
public String toString() {
return "Bean{" +
"beanName='" + beanName + '\'' +
", beanPath='" + beanPath + '\'' +
'}';
}
}
–2,创建Spring容器,并指定要维护的类,提供getBean(),根据beanName获取对象
package cn.tedu.myioc;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MyIOC {
//1,创建list,存好多bean
private List<Bean> beans = new ArrayList<>();
public MyIOC() throws Exception {
Bean b1 = new Bean("hello","cn.tedu.myioc.Hello");
Bean b2 = new Bean("user","cn.tedu.myioc.User");
beans.add(b1);
beans.add(b2);
//new
init();
}
Map<String,Object> map = new HashMap<>();
//2,创建map,存对象 { hello=new Hello() , user=new User()}
public void init() throws Exception {
//遍历list,获取每个bean
for(Bean b : beans){
String key = b.getBeanName();
String quanlujing = b.getBeanPath();
Object value = Class.forName(quanlujing).newInstance();
map.put(key,value);
}
}
//3,getBean()--根据key获取value
public Object getBean(String beanname){
return map.get(beanname) ;
}
}
–3,创建类
–4,测试
package cn.tedu.myioc;
public class Test1 {
public static void main(String[] args) throws Exception {
MyIOC my = new MyIOC();
//根据类名,获取类的对象
Object o = my.getBean("hello");
System.out.println(o);//cn.tedu.myioc.Hello@54bedef2
//根据类名,获取类的对象
Object o2 = my.getBean("user");
System.out.println(o2);//cn.tedu.myioc.User@5caf905d
}
}