【Spring学习笔记(2):Bean的基础配置】

一、前言

前面学完Spring之后知道,Spring框架的核心功能有两个:①Spring容器负责创建、管理所有的Java对象,然而这些Java对象被称为Bean。②Spring容器管理容器中Bean之间的依赖关系,Spring使用一种被称为"依赖注入"的方式来管理Bean之间的依赖关系。对于开我们这些开发者而言,使用Spring框架主要是做两件事:①开发Bean;②配置Bean。对于Spring框架来说,就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成"依赖注入"。

二、Bean的定义

Bean是一个由Spring IoC容器实例化、组装和管理的对象。

2.1.1 Bean的基础配置(id和class)

<bean id = "  "  class = " "/>

关于<bean>标签的功能、使用方式以及id和class属性的作用,我们通过一个表格详解。

类别     描述
名称 bean
类型 标签
所属 beans标签
功能 定义Spring核心容器管理的对象
格式

<beans>

        <bean />

        <bean></bean>

</beans>

属性

列表

Id:bean中的id,使用容器可以通过id值获取对应的bean,在一个容器中id的值是唯一的,简称bean的唯一标识符

Class:bean的类型,即配置的bean的全路径类名,指定bean的具体实现类。

例子

<bean id = "bookDao" class = " com.system.dao.impl.BookDaoImpl" />

<bean id = "bookService" class = " com.system.service.impl.BookServiceImpl"></bean>

2.1.2特别说明:

Class属性里面不能写接口!!!因为接口是没有办法创建对象的。一般情况下,Spring会直接使用new关键字来创建该Bean的实例。所以class类里必须提供bean实现类的类名。

2.1.3入门案例代码实现:

需求分析:将BookServiceImpl和BookDaoImpl交给Spring管理,并从容器中获取对应的bean对象进行方法调用。

(1)在IDEA中创建Maven项目

(2)在pom.xml中添加Spring依赖的jar包

(3)创建BookService、BookServiceImpl、BookDao和BookDaoImpl四个类

(4)在resource文件夹里面添加Spring的配置文件,完成Bean的配置

(5)使用Spring提供的接口完成IOC容器的创建

(6)从容器中获取对象进行方法的调用

步骤1:在IDEA中创建Maven项目

 步骤2:在pom.xml中添加Spring依赖的jar包

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

 步骤3:创建BookService、BookServiceImpl、BookDao和BookDaoImpl四个类

 步骤4:在resource文件夹里面添加Spring的配置文件,完成Bean的配置

resources下添加Spring配置文件applicationContext.xml,并完成Bean的配置

步骤5: 在配置文件中完成bean配置

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

    <!--bean标签标示配置bean
    	id属性标示给bean起名字
    	class属性表示给bean定义类型
	-->
    <bean id="bookDao" class="com.system.dao.impl.BookDaoImpl"/>
    <bean id="bookService" class="com.system.service.impl.BookServiceImpl"/>

</beans>

步骤6:获取IOC容器

使用Spring提供的接口完成IOC容器的创建,创建App类,编写main方法

public class App {
    public static void main(String[] args) {
        //获取IOC容器
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 
    }
}

步骤7:从容器中获取对象进行方法调用

public class APP2 {
    public static void main(String[] args) {
        //3.获取IOC容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //4.获取bean
       //BookDao bookDao =(BookDao) ctx.getBean("bookDao");
       //bookDao.save();
       BookService bookService = (BookService) ctx.getBean("bookService");
       bookService.save();
    }
}

步骤8:运行程序

测试结果为:

 2.2 Bean中的name属性

类别 描述
名称

name

类型 属性
所属 bean标签
功能 定义bean的别名,可定义多个,使用逗号(,)分号(;)空格( )分隔
例子

<bean id = "bookDao"  name = " dao bookDaoImpl" class = " com.system.dao.impl.BookDaoImpl" />

<bean name = "service,bookServiceImpl" class = " com.system.service.impl.BookServiceImpl">

</bean>

2.2.1使用说明

步骤1:配置别名

打开Spring的配置文件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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--name:为bean指定别名,别名可以有多个,使用逗号,分号,空格进行分隔-->
    <bean id="bookService" name="service service4 bookEbi" class="com.system.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
    </bean>

    <!--scope:为bean设置作用范围,可选值为单例singloton,非单例prototype-->
    <bean id="bookDao" name="dao" class="com.system.dao.impl.BookDaoImpl"/>
</beans>

说明:Ebi全称Enterprise Business Interface,翻译为企业业务接口

步骤2:根据名称容器中获取bean对象

public class AppForName {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //此处根据bean标签的id属性和name属性的任意一个值来获取bean对象
        BookService bookService = (BookService) ctx.getBean("service4");
        bookService.save();
    }
}

步骤3:运行程序 

2.3Bean中的scope配置

关于Bean的作用范围是Bean属性配置的一个重点内容

先通过表格看下Bean作用范围的配置属性:

类别 描述
名称 scope
类型 属性
所属 bean标签
功能

定义bean的作用范围,可选范围如下

(1)singleton:单例(默认)

(2)prototype:非单例

例子 <bean id = "bookDao" class = "com.system.dao.impl.BookDaoImpl" scope = "prototype"/>

2.3.1 验证IOC容器中对象是否为单例

验证思路:

同一个bean获取两次,将对象打印到控制台,看打印出的地址值是否一致。

具体实现:

创建一个AppForScope的类,在其main方法中来验证。

public class AppForScope {
    public static void main(String[] args) {
        ApplicationContext ctx = new
                ClassPathXmlApplicationContext("applicationContext.xml");

        BookDao bookDao1 = (BookDao) ctx.getBean("bookDao");
        BookDao bookDao2 = (BookDao) ctx.getBean("bookDao");
        System.out.println(bookDao1);
        System.out.println(bookDao2);
    }
}

打印,观察控制台的打印结果:

 结论:

Spring创建的bean对象都是单例的

2.3.2配置bean为非单例 

(1)在Spring配置文件中,配置scope属性来实现bean的非单例创建

(2)在Spring的配置文件中,修改<bean>的scope属性

<bean id="bookDao" name="dao" class="com.system.dao.impl.BookDaoImpl" scope=""/>

(3)将scope设置为singleton

<bean id="bookDao" name="dao" class="com.system.dao.impl.BookDaoImpl" scope="singleton"/>

运行AppForScope,打印看结果

(4)将scope设置为prototype

<bean id="bookDao" name="dao" class="com.system.dao.impl.BookDaoImpl" scope="prototype"/>

运行AppForScope,打印看结果

结论:使用bean的scope属性可以控制bean的创建是否为单例:

  • singleton默认为单例

  • prototype为非单例

 2.4Bean基础配置小结

关于Bean的基础配置中,需要掌握以下属性

<bean

        id="bean的唯一标识"

        class="bean的类全名"

        scope="bean的作用范围,有singleton(默认)和prototype"

        name="为bean取的别名"/>

猜你喜欢

转载自blog.csdn.net/long_0901/article/details/124718273