2021.11.26第三阶段

Ioc 降低代码的耦合性,

面向接口开发通过多态思想 减少代码重复性

Spring容器

由容器管理对象的生命周期(出生到销毁)

容器加载对象  注入给用户

1.xml。

准备xml配置文件 ,准备bean标签 <bean= id="" class="">

把bean当做map集合来

key是id的值 value是通过class实例化的对象

2.注解开发

准备配置类 @COfiguration+@baen

*****

3.工厂模式

*****

二、Spring框架

1.1单例和多例

单例:在内存中只有一份

多例 在内存中可能有多份

springdemo5_base

规则1:默认情况下spring管理的对象都是单例的

1.2懒加载机制

1.2.1说明 如果Spring容器创建,对象立即创建 则该加载方式为立即加载  容器启动就创建

如果Spring容器创建 对象使用时创建 则该加载方式为 懒加载  用时才创建

@Lazy添加表示为懒加载

测试说明 主要测试对象中的无参构造什么时候执行

12.3多例和懒加载的关系

只要对象是多例模式 都是懒加载!在单例模式中控制懒加载才有效

1.2.4lazy使用场景

场景1 服务器启动时 如果加载太多资源 必然导致服务器启动慢,可以适当将不重要资源设置为懒加载

场景2 有时用户需要一些特殊的链接 而链接的创建需要很长的时间 可以使用懒加载

1.3Spring生命周期的管理

1.3.1生命周期的说明

一个对象从创建到消亡可以划分为四个阶段 如果需要对程序进行干预 则可以通过周期方法进行干预(回调函数/钩子函数/接口回调)

初始化、对象创建、对象使用、销毁

生命周期函数自动调用

 1.3.2生命周期函数方法的使用

@postconstruct 对象创建之后立即调用

@PreDestroy 销毁前调用

可以对类资源进行干预

1.4依赖(DI)

1.4.1创建结构

准备User  dog cat

dog cat 向用户user对象注入

1.4.2 @AUtowired注解

在对象中如果需要属性的注入 一般使用这个 可以将spring容器中的对象 自动注入到属性之中

注入方式:

1.默认按照类型注入

如果注入属性是接口 则自动注入接口的实现类

2.按照名称注入(key)

一般不用

重要前提: 如果需要依赖注入 则对象必须交给spring容器管理 

1.4.3接口多实现

一个接口两个实现类没法运行

一个接口一个实现类

@Qualifiar 指定id   不单独使用 和 @Autowried

@Resource 注解 @Autowried和@Qualifiar的结合

1.5MVC设计思想

1.5.1MVC思想说明

经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面

m:model 业务模型

v:view  用户界面

c:contrl  控制层

mvc是一种思想 降低代码的耦合性

基于mvc这种设计思想

1.5.2层级代码思想

mvc设计思想,实现了前后端的松耦合 但是根据实际开发很多业务逻辑复杂如果将所有的代码都写到一个java类中这样打码结合很臃肿,为了很好的实现mvc设计思想 所以后端代码也应该分层

分层说明

1.controller层 与前段业务交互    @controller控制层

2.sevice层 业务层 编辑业务逻辑   @service业务层

3. 持久层 dao/mapper 实现数据的相关操作 @Repository

采用面向借口开发

MVC>三层代码结构

1.6三层代码的结构

serviece调mapper

package com.jt.sevice;

import com.jt.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService{
    @Autowired//借口是实现类对象
    private UserMapper userMapper;//默认按照类型注入
    @Override
    public void add() {
        userMapper.addUser();
    }
}

mapper--service--control

   2-----------2-----------1

package com.jt.control;

import com.jt.sevice.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class UserController {
    //control这个层只有类 不用写借口
    @Autowired
    private UserService userService;//不创实现类 创借口 AUtowried碰见借口就调实现类
    public void addUser(){
        userService.addUser();
    }

}

spring测试一定要整配置类

package com.jt.Config;

import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Repository;

@Configurable
@ComponentScan("com.jt")
public class SpringConfig {
}
package com.jt.test;

import com.jt.Config.SpringConfig;
import com.jt.control.UserController;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class testDemo {
    @Test
    public void testdemo1(){
        ApplicationContext context=
                new AnnotationConfigApplicationContext(SpringConfig.class);
        UserController userController=context.getBean(UserController.class);
        userController.addUser();
    }
}

1.7谈一谈对IOC、DI的看法

历史:传统代码其中的属性对象都是通过new手动创建 这样代码耦合性高不方便扩展

功能:ioc 由spring容器管理对象的生命周期

使得对象与对象的耦合性降低

di是依赖注入 只有被spring容器管理的对象才可以被依赖注入component

默认条件下采用类型注入  特殊需求也可以通过名称注入@Quailifiar

spring ioc和di相互配合可以极大程度降低耦合  

作用:spring采用ioc和di的设计方式 可以整合其他第三方的框架 使得程序的调用浑然一体

1.8注解赋值

@value 注解 可以直接为基本类型赋值

user.properties

对象中属性一般都是业务数据 如果需要给业务数据辅助 一般采用properties文件更加灵活

一般在resoures目录下

猜你喜欢

转载自blog.csdn.net/weixin_62451027/article/details/121552285
今日推荐