Spring-day15—IOC

0. Spring

目的: 解决企业应用开发的复杂性
**功能:**使用基本的JavaBean代替EJB
**spring理念:**使用现有技术更加容易使用,本身是一个大杂烩,整合了现有技术的框架
-Rod Johnson 是Spring Framework 的创始人
官网:https://spring.io/projects/spring-framework#overview
官方下载地址: https://repo.spring.io/ui/native/release/org/springframework/spring
GitHub:https://github.com/spring-projects/spring-framework
https://mvnrepository.com/

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.10</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.10</version>
</dependency>

2.优点

Spring是一个开源的免费框架
Spring是一个轻量级、非入侵的框架
控制反转(IOC),面向切面编程(AOP)
支持事务处理,对框架整合的支持
总结: Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架

3.组成

一,修改端口号

–1,创建application.yml文件

命名固定格式- application.yml

在这里插入图片描述

–2.修改端口号

在这里插入图片描述

二,SpringBoot热部署

–1, 在pom.xml 添加jar包的依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>2.5.2</version>
        </dependency>

会报错:
未添加 < version>2.5.2
在这里插入图片描述

–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>
            <version>1.18.20</version>
        </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;
@Data//
@NoArgsConstructor//无参构造
@AllArgsConstructor//全参构造
@Accessors(chain = true)//链式编程
public class Student {

    //类里面应该提供哪些属性---和页面中name属性的值相同
    private String user;
    private Integer age;
    private Integer sex;
    private String[] like;
    private Integer edu;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date intime;
}

3.测试

package cn.tedu.controller;

import cn.tedu.pojo.Student;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("student")
public class StudentController {
@RequestMapping("add")//
    public Student add(Student s) {
        System.out.println(s);
        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();

        return s;
    }
}

四,Spring的IOC

1.作用目的

Inversion of Control,控制反转,是指把管理对象的权利交给spring框架。

2,XML方式实现IOC

创建hello类
在这里插入图片描述

package cn.tedu.spring;

public class Hello {
     void hi(){
         System.out.println("hello SPRING");
    }
}

创建配置文件,配置类的信息
选中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"). }    -->
    <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
创建类,使用注解
@Component

package cn.tedu.spring2;

import org.springframework.stereotype.Component;
//Map<类名首字母要小写,类的对象> - {user=new User()}
@Component
public class User {
    public void method(){
        System.out.println("hello 同桌!");
    }
}

创建配置文件,只需要指定包的路径
在这里插入图片描述

<?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">

    <!--<bean id="Son" class="cn.tedu.spring2.Son"></bean>-->
    <!--包扫描:只需要指定从哪个包开始扫描,
    注解开发:只需要指定从哪个包开始扫描用了@Component注解类,自动IOC
    base-package需要指定一个包的路径-->
    <context:component-scan base-package="cn.tedu"></context:component-scan>
</beans>

读取配置文件,获取对象

    @Test
    public void ioc2(){
        ClassPathXmlApplicationContext spring3 =new ClassPathXmlApplicationContext("spring_config2.xml");
        Object s = spring3.getBean("son");
        System.out.println(s);//cn.tedu.spring.User@2df3b89c
        Son sa =(Son)s;
        sa.niu();
        Object o2 = spring3.getBean("user");
        System.out.println(o2);//cn.tedu.spring.User@2df3b89c
        User u =(User)o2;
        u.method();

    }

测试
在这里插入图片描述
总结
在这里插入图片描述

五,模拟IOC

–1,创建Bean类,描述类的信息

package cn.tedu.myIOC;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data   //自动提供 get set tostring equals hashCode
@NoArgsConstructor//无参构造
@AllArgsConstructor//全参构造
@Accessors(chain = true)//链式编程
public class Bean {
    private String name;
    private String path;

}

–2,创建Spring容器,并指定要维护的类,提供getBean(),根据name获取对象 package cn.tedu.myIOC;

package cn.tedu.myIOC;

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("猛哥","cn.tedu.spring.Hello");
        Bean b2 = new Bean("杰哥","cn.tedu.spring2.Son");
        Bean b3 = new Bean("威哥","cn.tedu.spring2.User");
        beans.add(b1);
        beans.add(b2);
        beans.add(b3);

        init();
    }
    Map <String,Object> map = new HashMap<>();
    //2.创建map,有对象{ hello = new hello()。user}
    public void init() throws Exception {
        //遍历list,获取每个bean
        for (Bean b : beans){
            String key = b.getName();
            String q = b.getPath();
            Object value = Class.forName(q).newInstance();
            map.put(key,value);

        }
    }
        //3.getBean()--根据key获取value
        public Object getBean(String name){
            return map.get(name);
        }
    }

–4,总结
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值