Spring框架2

本文详细介绍了Spring框架的核心概念,包括单例和多例模式,懒加载机制及其应用场景,Spring对象的生命周期管理,依赖注入(DI)的使用,以及MVC设计思想。通过实例演示了@Scope、@Autowired、@Lazy、@Resource注解的使用,并探讨了IOC/DI的重要性和@Value注解的属性赋值方式。
摘要由CSDN通过智能技术生成

目录

一、单例和多例

-1.关于单例和多例说明

-2 创建项目springdemo5_base

-3. 编辑User类

-4.编辑配置类

-5.编辑测试类

 二、懒加载机制

-1.懒加载说明

-2.多例与懒加载的关系

-3.关于lazy 使用场景的说明

三、Spring对象生命周期管理

-1.关于对象生命周期说明

 -2生命周期函方法的使用

 -3.使用注解

四、 依赖注入(Dependency Injection,简称DI)

-1.@Autowired注解

-2.创建springdemo6_di项目 

-3.编辑Pet接口

-4.编辑Cat类

-5.编辑User类

-6.编辑配置类

-7.编辑测试类

-8.接口多实现的情况说明

-9.编辑Dog类

-10.解决方案

-11.@Resource注解说明

五、MVC 设计思想

-1.MVC思想说明

-2.层级代码结构

-3.创建springdemo7_mvc项目 

1.编辑Mapper接口

-2.编辑MapperImpl实现类

3.编辑Service接口

4.编辑UserServiceImpl实现类

5.编辑Controller层

6.编辑配置类

7.编辑测试类

-4.请谈一下你对IOC/DI的看法(开放)

-5.@Value注解说明

1.注解赋值

 2.编辑user.properties

 3.@value为属性赋值


一、单例和多例

-1.关于单例和多例说明

  1. 单例: Spring容器中管理对象,在内存中只有一份
  2. 多例: Spring容器中管理对象,在内存中可能有多份

属性值:

  1. @Scope(“singleton”) //默认值 单例模式
  2. @Scope(“prototype”)//默认值 多例模式 

-2 创建项目springdemo5_base

-3. 编辑User类

package com.jt.demo;

import org.springframework.stereotype.Component;

public class User {
    public User(){
        System.out.println("我是无参构造,创建对象");
    }

    public void say(){
        System.out.println("测试对象是单例还是多例");
    }
}

-4.编辑配置类

package com.jt.config;

import com.jt.demo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

@Configuration  //标识这是配置类
@ComponentScan("com.jt")
public class SpringConfig {

    @Bean
    @Scope("singleton")     //默认值 单例模式
    //@Scope("prototype")   //      多例模式
    public User user(){
        return new User();
    }
}

-5.编辑测试类

package com.jt;

import com.jt.config.SpringConfig;
import com.jt.demo.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSpring {
    @Test
    public void testDemo1(){
        ApplicationContext context =
                new AnnotationConfigApplicationContext(SpringConfig.class);
        User user1 = context.getBean(User.class);
        User user2 = context.getBean(User.class);
        user1.say();
        System.out.println(user1 == user2);//true
    }
}

 二、懒加载机制

-1.懒加载说明

说明:

如果Spring容器创建,对象立即创建则该加载方式为 “立即加载”, 容器启动创建
如果Spring容器创建,对象在被使用的时候才创建, 则称为"懒加载" 用时才创建

注解: @Lazy 添加表示改为懒加载
测试说明: 主要测试对象中的无参构造什么时候执行!!!

package com.jt.config;

import com.jt.demo.User;
import org.springframework.context.annotation.*;

@Configuration  //标识这是配置类
@ComponentScan("com.jt")
public class SpringConfig {

    @Bean
    //@Scope("singleton")    //默认值 单例模式
    //@Scope("prototype")    //  多例模式
    @Lazy                    //懒加载
    public User user(){
        return new User();
    }
}

-2.多例与懒加载的关系

说明: 只要对象是多例模式,则都是懒加载!, 在单例模式中控制懒加载才有效.
规则说明:

lazy true lazy false
单例模式 有效 懒加载 有效 立即加载
多例模式 无效 懒加载 无效 懒加载

-3.关于lazy 使用场景的说明

场景1: 服务器启动时,如果加载太多的资源,则必然导致服务器启动慢, 适当的将不重要的资源设置为懒加载.
场景2: 有时用户会需要一些特殊的"链接",而这些链接的创建需要很长的时间.可以使用懒加载.

三、Spring对象生命周期管理

-1.关于对象生命周期说明

说明: 一个对象从创建到消亡,可以划分为四个阶段. 如果需要对程序进行干预.则可以通过周期方法进行干预. (回调函数/钩子函数/接口回调)
图解说明生命周期函数的作用: 主要作用可以在各个时期对对象进行干预

 -2生命周期函方法的使用

package com.jt.demo;

import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component  //将对象交给Spring容器管理 key=person value:反射对象
public class Person {

    public Person(){
        System.out.println("张三出生了,资质拉满");
    }

    @PostConstruct  //在对象创建之后立即调用
    public void init(){
        System.out.println("张三称为少年奇才");
    }

    //业务方法
    public void doWork(){
        System.out.println("迎娶美人鱼!!!");
    }

    @PreDestroy //对象消亡时 进行调用
    public void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值