Note/JAVA/JAVA EE/Web程序设计笔记03——第二章:Spring中的Be...

5.8 KiB
Raw Blame History

第二章Spring中的Bean

1、Bean的配置

如果把Spring看做一个大型工厂则Spring容器中的Bean就是该工厂的产品。要想使用这个工厂生产和管理Bean就需要在配置文件中告诉它需要哪些Bean以及需要使用何种方式将这些Bean装配到一起。

testBean的本质就是Java中的类而Spring中的Bean其实就是对实体类的引用来生产Java类对象从而实现生产和管理Bean .

XML配置文件的根元素是中包含了多个子元素每个子元素定义了一个Bean并描述了该Bean如何被装配到Spring容器中

关于元素的常用属性如下表所示:

属性或元素名称 描述
id 是一个Bean的唯一标识符,Spring容器对Bean的配置、管理都通过该属性来完成。
name Spring 容器同样可以通过此属性对容器中的 Bean 进行配置和管理name 属性中可以为 Bean指定多个名称每个名称之间用逗号或分号隔开。
class 该属性指定了 Bean 的具体实现类,它必须是一个完整的类名,使用类的全限定名。
scopes 用来设定 Bean 实例的作用域其属性值有singleton单例、prototype原型、request、session、global Session、application和 websocket。其默认值为 singleton。

作用域的种类

作用域名称 说明
singleton单例 使用singleton定义的Bean在Spring容器中将只有一个穿例也就是说无论有多少个Bean 引用它始终将指向同一个对象。这也是Spring 容器默认的作用域。
prototype原型 每次通过Spring容器获取的prototype定义的Bean时容器都将创建一个新的 Bean 实例。

test如果在Bean中未指定id和name则Spring会将class值当作id使用。

2、构造器实例化

首先创建一个Maven项目然后导包

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.6.RELEASE</version>
</dependency>

然后在 main 文件下面创建Java源码包并在包下创建名为 com.ssm.instance.constructor 包 并在其下创建 Bean1 类

然后在 main 文件创建名为 resources 的 Resources Root (源根)并配置 Bean1 的 id 和 class

<bean id="bean1" class="com.ssm.instance.constructor.Bean1"/>

然后在 com.ssm.instance.constructor 包下创建 InstanceTest1 类

public static void main(String[] args) {
        //定义配置文件路径
        String xmlPath = "beans1.xml";
        //ApplicationContext在加载配置文件时对Bean进行实例化
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        Bean1 bean = (Bean1) applicationContext.getBean("bean1");
        System.out.println(bean);
    }

程序执行截图:

image-20220309123304518

3、静态工厂实例化

首先在 Java 包下创建一个名为 com.ssm.instance.static_factory 包,然后在其包下创建一个 名为 Bean2 的类以及一个叫做 MyBean2Factory 的类 并在这个类中创建一个静态方法来实现返回 Bean2 实例

 //使用自己的工厂创建Bean实例
     public static Bean2 createBean(){
        return new Bean2();
    }

然后在 resources 下创建 beans2.xml 并输入以下代码:

<bean id ="bean2"
          class="com.ssm.instance.static_factory.MyBean2Factory"
          factory-method="createBean"/>

然后在 static_factory 下创建一个名为 InstanceTest2 的测试类,

public static void main(String[] args) {

        String xmlPath = "beans2.xml";

        ApplicationContext applicationContext =new ClassPathXmlApplicationContext(xmlPath);
        System.out.println(applicationContext.getBean("bean2"));
    }

程序执行截图:

image-20220309142136727

4、实例工厂实例化

首先在 Java 文件下面创建一个名为 com.ssm.instance.factory 的包,并在其下面创建一个名为 Bean3 的类和一个名为 MyBean3Factory 的类,创建 Bean3 的实例方法,输入以下代码:

 public MyBean3Factory (){
        System.out.println("Bean3 工厂实例化中");
    }

    //创建 Bean3 实例的方法
    public Bean3 createBean(){
        return new Bean3();
    }

在 resources 下创建 beans3.xml 并输入以下代码:

<!--    配置工厂    -->
    <bean id="myBean3Factory"
          class="com.ssm.instance.factory.MyBean3Factory"/>

<!--        使用 factory-bean 属性指向配置的实例工厂,
            使用 factory-method 的属性确定使用工厂中的哪个方法   -->
    <bean id="bean3"
          factory-bean="myBean3Factory"
          factory-method="createBean" />

然后在 factory 下创建一个名为 InstanceTest3 的测试类,并输入以下代码:

public static void main(String[] args) {
    //指定配置文件路径
    String xmlPath = "beans3.xml";
    //ApplicationContext在加载配置文件时对Bean进行实例化
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
    System.out.println(applicationContext.getBean("bean3"));
}

程序执行截图:

image-20220309144326438