Bean

时间:2021-07-15
本文章向大家介绍Bean,主要包括Bean使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Bean

一、Bean 是啥

  1. bean 是对象,一个或多个不限定。
  2. bean 由 Spring 中一个叫 IOC 的东西管理。
  3. 我们的程序由一个个 bean 组成。

二、Bean 分为两类

2.1、注册 Bean

把你要实例化的对象转换成一个 Bean,放在 IOC 容器中。

注解 注册:

  • @Component
  • @Repository
  • @Controller
  • @Service
  • @Configuration
  • ....

XML 注册:

<bean id="beanId" class="com.xxx"/>

注意:

  • 必须确保 beanId 是全局唯一不然会报错。
  • 可以不设置 beanId,但调用的时候就需要使用 类的全限定名。

2.2、使用 Bean

即是把已经在 配置类 或者 xml 文件中配置好的 Bean 拿来使用,完成属性、方法的组装。

  • 通过 byType@Autowired) 获取 IOC 容器中的 Bean。
  • 通过 byName@Resource)获取 IOC 容器中的 Bean。

详细


三、Bean 作用域

  1. 单例模式(Spring 默认机制)

    <bean id="..." class="..." scope="singleton"/>
    
  2. 原型模式:每次从容器中 get 的时候,都会产生一个新对象!

    <bean id="..." class="..." scope="prototype"/>
    
  3. Web 使用的作用域

    1. request:在一次请求中创建,创建完失效

      <bean id="..." class="..." scope="request"/>
      
    2. session:一直在 session 中活着

      <bean id="..." class="..." scope="session"/>
      
    3. application:在 全局中活着


四、Bean 的自动装配

自动装配就是指 Spring 容器可以自动装配(autowire)相互协作的 Bean 之间的关联关系。
简化就是:将一个 Bean 注入其它 Bean 的 Property 中。

在 Spring 中有三种装配的方式

  1. 在 xml 中显示的配置
  2. 在 java 中显示配置
  3. 隐式 的自动装配 bean
    • 在 XML 文件中使用 autowire 属性即可。

4.1、XML 配置文件装配

实体类

public class People{

    private Cat cat;

    public People(){}

    public People(Cat cat){
        this.cat = cat;
    }

    public void setCat(Cat cat){
        this.cat = cat;
    }

    public Cat getCat(){
        return cat;
    }

    @Override
    public String toString(){
        return "People{cat="+
                cat +
                '}';
    }
}

1、byName自动装配

  • byName:会自动在容器上下文中,查找和 注入类中的 set() 名相同的 beanId 并注入。
<bean id="cat" class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People" autowire="byName"/>
  • 注意:
    • 被注入类的 beanId 可以随便起,但必须和 注入类中的 set() 名相同。

2、byType 自动装配

  • byType:会自动在容器上下文中,查找和 注入类中的 set() 参数名相同的 类名。
<bean class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People" autowire="byType"/>
  • 注意:
    • 必须保证 Spring 容器中类的 全限定名 唯一。
    • 包名不一样、类名一样的话,set() 参数类型是哪个就注入那个。

3、constructor 自动装配

  • constructor:会自动在容器上下文中,查找和 注入类中的 有参构造器 参数类型
<bean class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People" autowire="constructor"/>
  • 注意:
    • 被注入属性的 类型 和 个数必须 注入类中的 有参构造器 参数相同。

4.2、半注解实现自动装配

1. @Resource

详细

  • 实体类
public class People {

    @Resource
    private Cat cat;

    @Override
    public String toString(){
        return "People{" +
        "cat=" + cat +
        '}';
    }
}
  • xml 配置文件
<bean id="cat" class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People"/>

2. @Autowired

详细

  • 实体类
public class People {

    @Resource
    private Cat cat;

    @Override
    public String toString(){
        return "People{" +
        "cat=" + cat +
        '}';
    }
}
  • xml 配置文件
<bean class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People"/>

  • 同一个类在 Spring 容器中注册两次
    • 一个有 beanId 一个没有 beanId,自动装配会报错。
    • 如果其中有一个 beanId 和 绑定注解的属性名 一样就可以。

原文地址:https://www.cnblogs.com/shan-wang/p/15015825.html