iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring Bean的配置与实例化怎么实现
  • 199
分享到

Spring Bean的配置与实例化怎么实现

2023-07-02 08:07:45 199人浏览 独家记忆
摘要

这篇文章主要介绍“spring Bean的配置与实例化怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring Bean的配置与实例化怎么实现”文章能帮助大家解决问题。

这篇文章主要介绍“spring Bean的配置与实例化怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring Bean的配置与实例化怎么实现”文章能帮助大家解决问题。

一、 Spring Bean 配置方式

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

配置文件开发

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

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

Spring 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的三种方式:构造方法,静态工厂和实例工厂

环境准备

准备一个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!");    }}

编写spring配置文件

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

编写运行程序

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的方法:构造方法实例化,这也是最常用的方法,因为类都会提供默认的构造方法。下面来测试

在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 容器创建对象时用的也是构造方法

Spring Bean的配置与实例化怎么实现

将构造方法改成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底层用的是反射,访问到类中的私有构造方法。

Spring Bean的配置与实例化怎么实现

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

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底层使用的是类的无参构造方法

Spring Bean的配置与实例化怎么实现

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

Spring Bean的配置与实例化怎么实现

静态工厂实例化Bean

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

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

创建一个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();    }}

编写spring配置文件

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

编写运行程序

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();    }}

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

Spring Bean的配置与实例化怎么实现

实例工厂实例化Bean

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

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

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

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

编写spring配置文件

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

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

Spring Bean的配置与实例化怎么实现

FactoryBean

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

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

创建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;    }}

编写spring配置文件

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

编写运行程序

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://www.lsjlt.com/news/340666.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL怎么更新字段长度
    要更新MySQL表中的字段长度,可以使用ALTER TABLE语句。以下是更新字段长度的示例: ALTER TABLE table_...
    99+
    2024-05-14
    mysql
  • sql如何修改表字段长度
    要修改表字段的长度,可以使用ALTER TABLE语句,然后使用MODIFY COLUMN来修改字段的长度。以下是一个示例: ALT...
    99+
    2024-05-14
    sql
  • mysql数据量太大如何解决
    有几种方法可以解决MySQL数据量过大的问题: 数据库分区:将数据库表按照某种规则进行分区,分成多个小表,可以提高查询速度和管理...
    99+
    2024-05-14
    mysql
  • MySQL单表数据量过大如何解决
    在MySQL中,当单表的数据量过大时,可以采取以下几种方法来解决问题: 使用索引:在表的字段上创建适当的索引,可以提高查询效率,...
    99+
    2024-05-14
    mysql
  • mysql导出数据量过大如何解决
    当导出的数据量过大时,可以尝试以下方法来解决问题: 使用数据库工具:使用数据库管理工具如Navicat或MySQL Workbe...
    99+
    2024-05-14
    mysql
  • mysql中log_bin的作用是什么
    在MySQL中,log_bin是二进制日志文件的名称,用于记录所有对数据库进行更改的操作,如插入、更新、删除等。这些二进制日志文件可...
    99+
    2024-05-14
    mysql
  • mysql中log_bin的特点有哪些
    log_bin是MySQL的二进制日志文件,用于记录所有对数据库的修改操作,包括插入、更新、删除等。 log_bin文件是M...
    99+
    2024-05-14
    mysql
  • mysql rpm包安装的方法是什么
    要在Linux系统上安装MySQL RPM包,可以按照以下步骤操作: 下载MySQL的RPM包:你可以从MySQL官方网站下载适...
    99+
    2024-05-14
    mysql
  • mysql rpm包安装后怎么使用
    安装MySQL RPM包后,您可以通过以下步骤来使用MySQL: 启动MySQL服务:使用以下命令来启动MySQL服务: sud...
    99+
    2024-05-14
    mysql
  • lxml中怎么处理XML命名空间默认值
    在lxml中处理XML命名空间的默认值可以通过使用xpath()方法和register_namespace()方法来实现。...
    99+
    2024-05-14
    lxml
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作