cgb2105-day15

本文详细介绍了如何在Spring Boot应用中修改端口、实现热部署,使用Lombok简化POJO操作,深入解析Spring的IoC原理,包括XML配置与注解方式,并模拟了自定义IoC容器。涵盖了Spring Boot配置、依赖管理、代码优化和控制反转的核心内容。
摘要由CSDN通过智能技术生成

一,修改端口号

–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
    }
}

–5,总结

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值