Spring注入和生命周期

目录

获取Bean对象(对象装配)

属性注入

构造注入

Setter注入 

 三种注入的优缺点分析

注入的注解: 

一个类型多个bean对象的注入方式

1.让变量名等于bean的id 

2.用Resource注解(name=“bean的id”)

3.用Qualifier注解(“bean的id”) 

Bean的作用域 

作用域的概念:

Bean的六种作用域

Bean的生命周期


获取Bean对象(对象装配)

获取 bean 对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注入

对象装配(对象注入)的方式有以下三种:

  • 属性注入
  • 构造方法注入
  • Setter注入

属性注入

属性注入是使用 @Autowired 实现的,将 Service 类注入到 Controller 类中。

一般是Controller写一个方法(处理http请求),调用service的业务方法(处理业务逻辑),再调用repository的方法(处理数据库的CRUD操作)

//Controller类

@Controller
@Data //lombok注解
public class UserController {
    @Autowired
    private UserService userService;

}

//Service类

@Service
@Data
public class UserService {
    @Autowired
    private UserRepository userRepository;
}

构造注入

//    构造注入
    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    private UserRepository getUserRepository(){
        return userRepository;
    }

注意事项:如果类只有一个构造方法,那么 @Autowired 注解可以省略;如果类中有多个构造方法,那么需要添加上 @Autowired 来明确指定到底使用哪个构造方法。

Setter注入 

 @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

 三种注入的优缺点分析

属性注入:

优点:简洁,使用方便  缺点:只能用于loC容器

构造注入:

优点:通用性  缺点:有多个注入的时候会比较臃肿

Setter注入:

现在几乎不使用了,通用性不如构造注入,也比较臃肿

注入的注解: 

@Autowirte、@Resource 实现的效果是一样的

区别:@Autowirte是Spring框架提供的,@Resource是JDK提供的

一个类型多个bean对象的注入方式

当一个类型有多个bean对象时,该如何注入?

@Bean
    public Bean对象1 test_1(){
        Bean对象1 bean=new Bean对象1();
        bean.setName("hello");
        return bean;
    }

    @Bean
    public Bean对象1 test_2(){
        Bean对象1 bean=new Bean对象1();
        bean.setName("word");
        return bean;
    }

当出现多个Bean注解,返回同一对象类型是程序会报错

解决的方式有三种:

1.让变量名等于bean的id 

 @Autowired
    private Bean对象1 test_1;

2.用Resource注解(name=“bean的id”)

 第二种:用@Resource注解
    @Resource(name = "test_1")
    private Bean对象1 bean对象1;

3.用Qualifier注解(“bean的id”) 

  @Autowired
    @Qualifier("test_2")
    private Bean对象1 bean对象1;

Bean的作用域 

假设现在有一个公共的 Bean,提供给 A 用户和 B 用户使用,然而在使用的途中 A 用户却“悄悄”地修改了公共 Bean 的数据,导致 B 用户在使用时发生了预期之外的逻辑错误。

作用域的概念:

Bean 的作用域是指 Bean 在 Spring 整个框架中的某种行为模式,比如 singleton 单例作用域(默认),就表示 Bean 在整个 Spring 中只有一份,它是全局共享的,那么当其他人修改了这个值之后,那么另一个人读取到的就是被修改的值。

Bean的六种作用域

  1. singleton:单例作用域 (Spring默认的作用域)

  2. prototype:原型作用域(多例作用域)

  3. request:请求作用域(一次请求响应范围)

  4. session:回话作用域(一个会话的范围)

  5. application:全局作用域

  6. websocket:HTTP WebSocket 作用域

(注意:后4种状态是Spring MVC中的值,在普通Spring项目中只有前两种)
 

Bean的生命周期

Bean 的生命周期分为以下 5 大部分:
1.实例化 Bean(为 Bean 分配内存空间)
2.设置属性(Bean 注入和装配)
3.Bean 初始化
实现了各种 Aware 通知的方法,如 BeanNameAware、BeanFactoryAware、
ApplicationContextAware 的接口方法;
执行 BeanPostProcessor 初始化前置方法;(XXXbedoreXXX)
执行 @PostConstruct 初始化方法,依赖注入操作之后被执行;
执行自己指定的 init-method 方法(如果有指定的话);
执行 BeanPostProcessor 初始化后置方法。(XXXafterXXX)
4.使用 Bean
5.销毁 Bean
销毁容器的各种方法,如 @PreDestroy、DisposableBean 接口方法、destroy-method。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring 生命周期和 Bean 生命周期是密切相关的。在 Spring 容器中,每个 Bean 都有一个完整的生命周期,即从实例化、依赖注入,到销毁的过程,Spring 容器为我们管理了这些过程。Bean 生命周期包括 Bean 的创建、初始化、使用和销毁。具体来说,Spring 生命周期包括以下阶段: 1.实例化 Bean:容器根据配置文件或注解等方式创建 Bean 的实例。 2.设置 Bean 的属性值:容器会将 Bean 的属性值注入到 Bean 中,这是 Bean 生命周期的第二个阶段。Spring 提供了两种常用方式来实现 Bean 的属性注入构造函数注入和 Setter 方法注入。 3.调用 Bean 的初始化方法:在 Bean 的所有属性被设置之后,Spring 容器会调用 Bean 的初始化方法,这个方法可以是自定义的方法,也可以是 Spring 提供的初始化方法。 4.使用 Bean:在 Bean 初始化完成之后,Spring 容器会将 Bean 注入到需要使用它的地方,比如其他 Bean 或者 Controller 等。 5.销毁 Bean:当 Bean 不再需要时,Spring 容器会调用 Bean 的销毁方法,这个方法可以是自定义的方法,也可以是 Spring 提供的销毁方法。 Bean 生命周期Spring 生命周期的一部分,它描述了一个 Bean 在 Spring 容器中的生命周期。Bean 生命周期包括以下阶段: 1.实例化 Bean:容器根据配置文件或注解等方式创建 Bean 的实例。 2.设置 Bean 的属性值:容器会将 Bean 的属性值注入到 Bean 中,这是 Bean 生命周期的第二个阶段。Spring 提供了两种常用方式来实现 Bean 的属性注入构造函数注入和 Setter 方法注入。 3.调用 Bean 的初始化方法:在 Bean 的所有属性被设置之后,Spring 容器会调用 Bean 的初始化方法,这个方法可以是自定义的方法,也可以是 Spring 提供的初始化方法。 4.使用 Bean:在 Bean 初始化完成之后,Spring 容器会将 Bean 注入到需要使用它的地方,比如其他 Bean 或者 Controller 等。 5.销毁 Bean:当 Bean 不再需要时,Spring 容器会调用 Bean 的销毁方法,这个方法可以是自定义的方法,也可以是 Spring 提供的销毁方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值