【Spring IOC/DI】bean 的 5 种注册 与 5 种注入

什么是 bean

一个 bean 就是一个实例化对象

User user = new User()

上面这行代码中的 user, 就是 User 类的实例化对象,即一个 bean(User Bean)

什么是 IOC

Inversion of Control 控制反转(反转对 bean 的控制)

 spring ioc 是一个 bean 容器,我们可以将需要的 bean 放入其中

我创建我使用 变为 她创建我使用

使用 UserController 调用 UserService

我在 UserController 中 new UserService() ,我调用 userService 中的方法

她为我提供一个 new 好的 UserService 对象,我调用 userService 中的方法

我无需在意何时创建对象,何时使用对象,何时销毁对象(她来管理对象的生命周期)

我无需使用构造器 new 对象,不用关注构造器需要的参数(当构造器参数变化时,我也无需知道,我只是调用已经创建好的对象中的方法而已) 

5 种将 bean 注册进 SpringIOC 容器的方式

注册 bean 的方式分为 2 大类 5 小类

大类小类介绍

XML

注册

<bean id

        class

/>

直接类名注册

<bean id

        class

        fatory-method

/>

静态方法注册

<bean id

        factory-bean

        fatory-method

/>

实例方法注册

@

注册

@Configuration @Bean

Java-Based 注册

允许以编程方式配置 bean

@Component

@Controller

@Service @Repository

Annotation-Based 注册

将使用这类注解的类

对应的实例化对象

注册进 IOC 容器

XML注册

直接类名注册

<!--  直接注册 bean  -->
<bean id="userService" 
    class="com.syt.UserService"
/>

静态工厂方法注册

<!--  静态工厂注册 bean  -->
<bean id="staticUserService" 
    class="com.syt.UserServiceStaticFactory" 
    factory-method="staticUserService"
/>
public class UserStaticFactory {
    public static UserService staticUserService() {
        return new UserService();
    }
}

实例工厂方法注册

<!--  实例工厂注册 bean  -->
<bean id="userServiceIntanceFactory" 
    class="com.syt.UserServiceIntanceFactory"
/>

<bean id="instanceUserService" 
    factory-bean="userServiceIntanceFactory" 
    factory-method="instanceUserService"
/>
public class UserServiceIntanceFactory {
    public User intanceUserService() {
        return new UserService();
    }
}

属性初始值设置

<bean>
    <property 
        name 
        value
    />
</bean>
@ 注册

Annotation-Based

@Component
public class UserService {

}

Java-Based

@Configuration
public class UserServiceConfiguration {
    @Bean
    public UserService userService() {
        // 这里可以对 UserService 
        // 进行配置后
        // 再返回配置好的 UserService 对象
        return new UserService();
    }
}

 使用 spring 进行 @ 注册 需要在 beans 配置中配置自动包扫描路径

<context:component-scan
    base-pakage
/>

 什么是 DI

Dependency Injection 依赖注入(将 bean 注入进依赖 bean 使用 bean 的类) 

获取 IOC 容器中的 bean 的方式

5 种将 bean 注入进我们自己的代码中的方式

注入 bean 的方式分为 3 大类 5 小类

大类小类介绍
属性注入@Autowired / @Resouce

在代码中添加对应 bean 属性

在 bean 属性上添加这类注解

Setter 注入@Autowired / @Resouce

在代码中添加对应 bean 属性

并且实现对应 setter 方法

在 setter 方法上添加这类注解

<bean id

        class

>

        <property

                name

                ref

        />

</bean>

使用 XML 在注册的同时注入

,也需要注册类中有

bean 属性 与 对应 setter 方法

构造方法注入@Autowired / @Resouce

在代码中添加对应 bean 属性

并且实现对应构造方法

在构造方法上添加这类注解

<bean id

        class

>

        <constructor-arg

                name

                ref

        />

</bean>

使用 XML 在注册的同时注入

,也需要注册类中有

bean 属性 与 对应 构造方法

属性注入
public class UserController {
    @Autowired
    private UserService userService;
}
Setter 注入
public class UserController {

    private UserService userService;

    @Autowired
    public void SetUserService(UserService userService) {
        this.userService = userService;
    }
}
<!--  Setter 注入  -->
<bean id="propertyUserService" 
    class="com.syt.service.UserService"
>
    <property 
        name="userDao" 
        ref="userDao"
    />
</bean>
构造方法注入
public class UserController {

    private UserService userService;

    @Autowired
    public UserController (UserService userService) {
        this.userService = userService;
    }
}
<!--构造器注入-->
<bean id="constructorUserService" 
    class="com.syt.service.UserService">
    <constructor-arg 
        name="userDao" 
        ref="userDao" 
    />
</bean>

补充

beans xml 配置

位置:

一般位于 resources 下,命名为 spring-config.xml 或 applicationContext.xml

基本内容

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

</beans>
spring-context 依赖

我用的 JDK 为 1.8

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.30</version>
</dependency>
  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值