返回顶部
首页 > 资讯 > 后端开发 > Python >详解Spring Bean的配置方式与实例化
  • 895
分享到

详解Spring Bean的配置方式与实例化

2024-04-02 19:04:59 895人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、 spring Bean 配置方式配置文件开发注解开发二、Spring Bean实例化环境准备构造方法实例化Bean静态工厂实例化Bean实例工厂实例化BeanFactory

一、 Spring Bean 配置方式

由 Spring ioc 容器管理的对象称为 Bean,Bean 配置方式有两种:配置文件开发注解开发

配置文件开发

Spring 配置文件支持两种格式:xml和properties,此教程以xml配置文件讲解。

XML 配置文件的根元素是 <beans>,该元素包含了多个子元素 <bean>。每一个 <bean> 元素都定义了一个 Bean

XML 配置文件常用元素表

属性名称描述
idBean 的唯一标识符,Spring ioC 容器对 Bean 的配置和管理都通过该属性完成。
nameBean 的别名,可以通过 name 属性为同一个 Bean 同时指定多个名称,每个名称之间用逗号或分号隔开。
class指定了Bean 的具体实现类,它必须是一个类的全限定名。
scopeBean 的作用域,属性值可以为 singleton(单例)、prototype(原型)、request、session 和 global Session。默认值是 singleton。

注解开发

先插个眼在这,过几天会发一篇文章详细介绍

二、Spring Bean实例化

通过控制反转,对象的创建权就交给了IoC容器,但是容器是如何来创建对象的呢?

bean本质上就是对象,对象在new的时候会使用构造方法,创建bean其实也是使用构造方法完成的。

实例化bean的三种方式:构造方法,静态工厂和实例工厂

环境准备

1.准备一个UserDao接口和一个UserDaoImpl实现类

//UserDao接口
public interface UserDao {
    public void say();
}
//UserDaoImpl实现类
public class UserDaoImpl implements UserDao {
    @Override
    public void say() {
        System.out.println("Hello,I am BigHorn!");
    }
}

2.编写spring配置文件

<bean id="userDao" class="com.bighorn.dao.impl.UserDaoImpl"/>

3.编写运行程序

public class App {
    public static void main(String[] args) {
        //获取IoC容器
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //从容器中获取对象
        UserDaoImpl userDao = context.getBean("userDao", UserDaoImpl.class);
        userDao.say();
    }
}

构造方法实例化Bean

第一种实例化bean的方法:构造方法实例化,这也是最常用的方法,因为类都会提供默认的构造方法。下面来测试

1.在UserDaoImpl类中添加一个无参构造方法,并打印一句话,方便观察结果。

public class UserDaoImpl implements UserDao {
    //添加一个无参构造方法
    public UserDaoImpl() {
        System.out.println("这是UserDaoImpl的无参构造方法");
    }

    @Override
    public void say() {
        System.out.println("Hello,I am BigHorn!");
    }
}

可以在控制台看到输出结果,说明Spring IoC 容器创建对象时用的也是构造方法

2.将构造方法改成private测试

public class UserDaoImpl implements UserDao {
    //将构造方法改成private
    private UserDaoImpl() {
        System.out.println("这是UserDaoImpl的无参构造方法");
    }

    @Override
    public void say() {
        System.out.println("Hello,I am BigHorn!");
    }
}

发现还可以运行成功,这说明Spring底层用的是反射,访问到类中的私有构造方法。

3.将无参构造方法换成有参构造方法

public class UserDaoImpl implements UserDao {
    //将无参构造方法换成有参构造方法
    private UserDaoImpl(int i) {
        System.out.println("这是UserDaoImpl的无参构造方法");
    }
    @Override
    public void say() {
        System.out.println("Hello,I am BigHorn!");
    }
}

程序会报java.lang.NoSuchMethodException错,说明Spring底层使用的是类的无参构造方法

4.画个图总结下:Spring 配置文件中 bean 标签的 id 和类的全限定名一一对应,所以 Spring IoC容器的 getBean 方法其实就是先根据 bean 的 id 获取该类的全限定名,然后再利用反射根据类的全限定名创建对象并返回。

静态工厂实例化Bean

第二种实例化Bean的方法:静态工厂实例化

了解即可,一般是用来兼容早期的一些老系统。

1.创建一个UserDaoFactory工厂类并提供一个静态方法

//UserDao接口
public interface UserDao {
    public void say();
}
//UserDaoImpl实现类
public class UserDaoImpl implements UserDao {
    public UserDaoImpl() {
        System.out.println("这是UserDaoImpl的无参构造方法");
    }
    @Override
    public void say() {
        System.out.println("Hello,I am BigHorn!");
    }
}
//UserDaoFactory工厂类
public class UserDaoFactory {
    //静态工厂创建对象
    public static UserDao getUserDao(){
        System.out.println("这是静态工厂实例化Bean");
        return new UserDaoImpl();
    }
}

2.编写spring配置文件

<!--
        class:工厂类全类名
        factory-method:工厂创建对象的方法名
     -->
<bean id="userDao" class="com.bighorn.factory.UserDaoFactory" factory-method="getUserDao"/>

3.编写运行程序

public class App {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        //获取IoC容器
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //从容器中获取对象
        UserDaoImpl userDao = context.getBean("userDao", UserDaoImpl.class);
        userDao.say();
    }
}

看见运行结果,输出以下语句

实例工厂实例化Bean

第二种实例化Bean的方法:实例工厂实例化

了解即可,其实和静态工厂差不多。只不过静态工厂可以直接通过静态方法创建bean,实例工厂要先new一个实例工厂对象,然后再通过这个实例工厂对象创建bean

1.创建一个UserDaoFactory工厂类,和静态工厂不一样的是,实力工厂提供的是一个普通方法

//UserDaoFactory工厂类
public class UserDaoFactory {
    //实例工厂创建对象
    public  UserDao getUserDao(){
        System.out.println("这是实例工厂实例化Bean");
        return new UserDaoImpl();
    }
}

2.编写spring配置文件

<!--
         userFactory:工厂的实例对象
         factory-bean:指向工厂的实例对象
         factory-method:工厂对象中创建对象的方法名
    -->
<bean id="userFactory" class="com.bighorn.factory.UserDaoFactory"/>
<bean id="userDao" factory-bean="userFactory" factory-method="getUserDao"/>

3.运行程序和静态工厂一样,查看运行结果

FactoryBean

实例工厂的方法听麻烦的,其实spring框架为我们一种实例工厂的方式:FactoryBean,比较实用,用来整合其他框架

我们只需要实现FactoryBean接口即可简化开发,下面来介绍下它的具体使用方法

1.创建UserDaoFactoryBean类,实现FactoryBean接口中的三个方法:

  • boolean isSingleton():设置bean作用域,默认true表示单例,false表示非单例
  • T getObject() throws Exception:返回的是bean实例对象
  • Class<?> getObjectType():返回的是被创建类的Class对象
public class UserDaoFactoryBean implements FactoryBean<UserDao> {
    //bean作用域:默认true表示单例
    public boolean isSingleton() {
        return true;
    }
    //代替实例工厂中创建对象的方法
    public UserDao getObject() throws Exception {
        System.out.println("这是FactoryBean实例化bean");
        return new UserDaoImpl();
    }
    //返回所创建类的Class对象
    public Class<?> getObjectType() {
        return UserDao.class;
    }
}

2.编写spring配置文件

<bean id="userDao" class="com.bighorn.factory.UserDaoFactoryBean"/>

3.编写运行程序

public class App {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        //获取IoC容器
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //从容器中获取对象
        UserDaoImpl userDao1 = context.getBean("userDao", UserDaoImpl.class);
        UserDaoImpl userDao2 = context.getBean("userDao", UserDaoImpl.class);
        System.out.println(userDao1);
        System.out.println(userDao2);
    }
}

以上就是详解Spring Bean的配置方式与实例化的详细内容,更多关于Spring Bean配置方式 实例化的资料请关注编程网其它相关文章!

--结束END--

本文标题: 详解Spring Bean的配置方式与实例化

本文链接: https://lsjlt.com/news/151139.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解Spring Bean的配置方式与实例化
    目录一、 Spring Bean 配置方式配置文件开发注解开发二、Spring Bean实例化环境准备构造方法实例化Bean静态工厂实例化Bean实例工厂实例化BeanFactory...
    99+
    2024-04-02
  • Spring Bean获取方式的实例化方式详解
    目录1.通过构造方法实例化2.通过简单工厂模式实例化3.通过factory-bean实例化4.通过FactoryBean接口实例化5.BeanFactory和FactoryBean的...
    99+
    2023-03-09
    Spring获取bean的方式 Spring Bean获取方式
  • Spring实例化bean的四种方式详解
    目录一、bean实例化——构造方法(常用)二、bean实例化——静态工厂(了解)三、bean实例化——实例工厂...
    99+
    2024-04-02
  • Spring中Bean的三种实例化方式详解
    目录一、环境准备二、构造方法实例化三、分析Spring的错误信息四、静态工厂实例化4.1 工厂方式创建bean4.2 静态工厂实例化五、实例工厂与FactoryBean5.1 环境准...
    99+
    2024-04-02
  • 详解Spring中bean实例化的三种方式
    今天我想来说说如何通过xml配置来实例化bean,其实也很简单。 使用xml配置来实例化bean共分为三种方式,分别是普通构造方法创建、静态工厂创建、实例工厂创建,OK,那么接下来我们来分别看看这几种方式。普通构造方法创建这种创建方式使我们...
    99+
    2023-05-31
    实例化 spring bean
  • Spring Bean的配置与实例化怎么实现
    这篇文章主要介绍“Spring Bean的配置与实例化怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring Bean的配置与实例化怎么实现”文章能帮助大家解决问题。...
    99+
    2023-07-02
  • Spring | IOC技术之Bean的配置与实例化
    👑 博主简介:    🥇 Java领域新星创作者    🥇 阿里云开发者社区专家博主、星级博主、技术博主 🤝 交流社区:BoBoo...
    99+
    2023-10-05
    spring java
  • Spring bean配置单例或多例模式方式
    目录Spring bean配置单例或多例模式单例多例Spring scope配置单例、多例模式1、scope属性介绍2、scope配置3、单例模式底层实现模拟Spring bean配...
    99+
    2024-04-02
  • Spring实例化bean的方式有哪些
    这篇文章主要介绍了Spring实例化bean的方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring实例化bean的方式有哪些文章都会有所收获,下面我们一起来看看吧。一、bean实例化&m...
    99+
    2023-07-02
  • Spring Bean实例化方式怎么实现
    这篇“Spring Bean实例化方式怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring ...
    99+
    2023-07-05
  • 【Spring(四)】万字详解bean的实例化
    文章目录 前言1.bean实例化1.1 bean的基础配置1.2 bean的实例化-构造方法1.3 bean的实例化-静态工厂1.4 bean的实例化-实例工厂与FactoryBean 总结 前言   在上篇文章,我们已...
    99+
    2023-08-20
    spring java 后端
  • Spring将一个的类配置成Bean的方式详解
    目录一、说明二、四种方式三、代码示例3.1 @Bean方式3.2 @Bean方式3.3 @Import导入ImportBeanDefinitionRegistrar实现类3.4 Be...
    99+
    2023-03-20
    Spring配置类Bean Spring将类配置成Bean
  • Spring中实例化bean的方式有哪些
    这篇文章主要为大家展示了“Spring中实例化bean的方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring中实例化bean的方式有哪些”这篇文章吧。前言在介绍Bean的实例化的...
    99+
    2023-05-30
  • spring中bean实例化的三种方式 -- Spring入门(二)
    文章目录 前言1.Bean实例化简介2.bean的实例化 -- 构造方法3.bean的实例化 -- 静态工厂实例化4.bean实例化 -- 实例工厂和FactoryBean5.三种bean实例化方式的区别 总结 前言 为了...
    99+
    2023-08-19
    spring java 后端
  • Spring Bean中Bean的实例化分析
    这篇文章主要介绍了Spring Bean中Bean的实例化分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring Bean中Bean的实例化分析文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-06-29
  • Spring源码解析Bean的实例化
    目录前言准备工作实例化bean1、AbstractBeanFactory 的 doGetBean方法2、AbstractAutowireCapableBeanFactory 的 cr...
    99+
    2024-04-02
  • 一文详解spring注解配置bean的初始化方法和销毁方法
    目录1、配置bean的初始化方法1.1、使用@Bean注解的initMethod属性1.2、使用@PostConstruct注解1.3、实现InitializingBean接口1.4...
    99+
    2023-05-18
    spring注解配置bean spring注解配置bean初始化方法 spring注解配置bean销毁方法 spring注解
  • Spring注解实现Bean自动装配示例详解
    何为自动装配 自动装配是 Spring 满足 bean 依赖的一种方式。 在使用 Spring 配置 bean 时,我们都要给配置的 bean 的属性设置一个值,如果不手动设置则都...
    99+
    2024-04-02
  • Java之Spring注解配置bean实例代码解析
    前面几篇均是使用xml配置bean,如果有上百个bean,这是不可想象的。故而,请使用注解配置bean !!!【1】注解类别@Component : 基本注解, 标识了一个受 Spring(点击这里可以下载《Spring应用开发完全手册》)...
    99+
    2023-05-31
    java spring bean
  • spring中aop的xml配置方法实例详解
    前言AOP:即面向切面编程,是一种编程思想,OOP的延续。在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等。aop,面向切面编程的目标就是分离关注点,比如:一个骑士只需要关注守护安全,或者远征,而骑士辉煌一生的事迹由谁...
    99+
    2023-05-31
    spring aop xml配置
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作