目录
四、 依赖注入(Dependency Injection,简称DI)
一、单例和多例
-1.关于单例和多例说明
- 单例: Spring容器中管理对象,在内存中只有一份
- 多例: Spring容器中管理对象,在内存中可能有多份
属性值:
- @Scope(“singleton”) //默认值 单例模式
- @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