对象注入(简单获取Bean对象)

前言

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

对象装配(对象注入)的实现⽅法以下 3 种:

  1. 属性注入
  2. 构造方法注入
  3. Setter 注入
    接下来,我们分别来看,下⾯我们按照实际开发中的模式,将 Service 类注⼊到 Controller 类中。

一、属性注入

属性注⼊是使⽤ @Autowired 实现的,将 Service 类注⼊到 Controller 类中。
Service 类的实现代码如下

@Service
public class UserService {
   public int userId = 10;

}

Controller 类的实现代码如下:

public class UserController {
 // 1.属性注入
  @Autowired
  private UserService userService;

  public void sayHi(){
      System.out.println("do hello UserController");
      System.out.println("userId -->"+userService.userId);
  }
}

}

获取 Controller 中的 sayHi ⽅法:

public class App {
  public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Spring-config.xml");

      UserController userController = context.getBean("userController",UserController.class);
      userController.sayHi();
  }
}
}

运行结果如下
在这里插入图片描述

二、 Setter注入

Setter 注⼊和属性的 Setter ⽅法实现类似,只不过在设置 set ⽅法的时候需要加上 @Autowired 注解,如下代码所示:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

1.引入库

代码如下(示例):

public class UserController {
    //2.setter注入
    @Autowired
    private UserService userService;
    public void  setter(UserService userService){
        this.userService = userService;

    }
    public void sayHi(){
        System.out.println("do hello UserController");
        System.out.println("userId -->"+userService.userId);
    }
}

三、构造方法注入

构造⽅法注⼊是在类的构造⽅法中实现注⼊,如下代码所示:

@Controller
public class UserController {
//3.构造方法注入
    @Autowired
    private UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    public void sayHi(){
        System.out.println("do hello UserController");
        System.out.println("userId -->"+userService.userId);
    }
}

ps:但是如果类中有多个构造⽅法,那么需要添加上 @Autowired 来明确指到底使⽤哪个构造⽅法,否则程序会报错

三种注入方法的优缺点

1.属性注入

优点:简单
缺点:
1.没办法实现final对象的注入
2.兼容性不好,只是用与Ioc容器
3.风险高,因为写法简单,容易违背单一设计原则

2、Setter注入

优点:符合单一设计原则(每个方法只改变一个对象)
缺点:
1.不能注入不可变对象(final修饰)
2.使用Setter注入的对象可能会被修改。(被别的对象或方法调用)

3、构造方法注入(Spring官方推荐)

优点:
1.可以注入不可变对象
2.注入的对象不会被改变(构造方法只调用一次)
3.可以保证注入对象被完全初始化
4.通用性更好

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值