Bean的基础配置

news2024/9/21 2:30:47

问题1:在<bean>标签上如何配置别名?

问题2:Bean的默认作用范围是什么?如何修改?

1. Bean基础配置【重点】

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

<beans>

        <bean/>

        <bean></bean>

</beans>

属性列表

id:bean的id,使用容器可以通过id值获取对应的bean,在一个容器中id值唯一

class:bean的类型,即配置的bean的全路径类名

<bean id="orderDao" class="cn.zxy.dao.impl.OrderDaoImpl"></bean>
<bean id="orderService" class="cn.zxy.service.impl.OrderServiceImpl">
 

2. Bean别名配置

类型描述
名称name
类型属性
所属bean标签
功能定义bean的别名,可定义多个,使用逗号(,)分号( ; ) 空格( )分隔
范例<bean id="orderDao" class="cn.zxy.dao.impl.OrderDaoImpl"></bean>
<bean id="orderService" class="cn.zxy.service.impl.OrderServiceImpl">

3 Bean作用范围配置【重点】

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

定义bean的作用范围,可选范围:

singleton:单例(默认)

prototype:非单例

范例 <bean id="bookDao" class="com.by.dao.impl.BookDaoImpl" scope="singleton"></bean>
 <bean id="bookDao" class="com.by.dao.impl.BookDaoImpl" scope="prototype"></bean>

扩展:

scope的取值不仅仅只有singleton和prototype,

还有request、session、application、 websocket ,

表示创建出的对象放置在web容器(tomcat)对应的位置。

比如:request表示保存到request域中。

<!--    sope 是bean的作用范围 可选单例singleton 非单例prototype-->
    <bean id="bookDao" class="com.by.dao.impl.BookDaoImpl" scope="singleton"></bean>
    <bean id="bookDao" class="com.by.dao.impl.BookDaoImpl" scope="prototype"></bean>
@Test
public void springdemo01(){
    //演示单例 非单例
    ApplicationContext ac=new ClassPathXmlApplicationContext("application.xml");
    BookDao bookDao=(BookDao)ac.getBean("bookDao");
    BookDao bookDao2=(BookDao)ac.getBean("bookDao");
    System.out.println(bookDao);
    System.out.println(bookDao2);
}

非单例打印结果 

 

最后给大家说明一下:在我们的实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分Bean不需要配置scope属性。

4. Bean的实例化

Bean的实例化方式有几种?

4.1 Bean是如何创建的【理解】

bean本质上就是对象,创建bean使用构造方法完成

4.2 实例化Bean的三种方式

4.2.1 构造方法方式【重点】

  • BookDaoImpl实现类

public class BookDaoImpl implements BookDao {
    public BookDaoImpl() {
        System.out.println("book dao 构造运行中。。。。");
    }

    @Override
    public void save() {
        System.out.println("book dao save....");
    }
}
  • applicationContext.xml配置

<!--方式一:构造方法实例化bean-->
<bean id="bookDao" class="com.by.dao.impl.BookDaoImpl"/>
  • AppForInstanceBook测试类

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

        BookDao bookDao = (BookDao) ctx.getBean("bookDao");

        bookDao.save();
    }
}

==注意:无参构造方法如果不存在,将抛出异常BeanCreationException==

4.2.2 静态工厂方式

  • OrderDao接口和OrderDaoImpl实现类

public interface OrderDao {
    public void save();
}
public class OrderDaoImpl implements OrderDao {
    public void save() {
        System.out.println("order dao save ...");
    }
}
  • OrderDaoFactory工厂类

//静态工厂创建对象
public class OrderDaoFactory {
    public static OrderDao getOrderDao(){
        System.out.println("工厂类创建中。。。");
        return new OrderDaoImpl();
    }
}
  • applicationContext.xml配置

<!--方式二:使用静态工厂实例化bean-->
<bean id="orderDao" class="com.by.factory.OrderDaoFactory" factory-method="getOrderDao"/>
  • AppForInstanceOrder测试类

public class AppForInstanceOrder {
    public static void main(String[] args) {
        
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
​
        OrderDao orderDao = (OrderDao) ctx.getBean("orderDao");
​
        orderDao.save();
    }
}

4.2.3 实例工厂方式

  • UserDao接口和UserDaoImpl实现类

public interface UserDao {
    public void save();
}
public class UserDaoImpl implements UserDao {
    public void save() {
        System.out.println("user dao save ...");
    }
}
  • UserDaoFactory工厂类

//实例工厂创建对象
public class UserDaoFactory {
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}
  • applicationContext.xml配置

<!--方式三:使用实例工厂实例化bean-->
  <bean id="userFactoy" class="com.by.factory.UserDaoFactory"/>
​
  <bean id="userDao" factory-method="getUserDao" factory-bean="userFactoy"/>
  • AppForInstanceUser测试类

public class AppForInstanceUser {
    public static void main(String[] args) {
        //        //创建实例工厂对象
        //        UserDaoFactory userDaoFactory = new UserDaoFactory();
        //        //通过实例工厂对象创建对象
        //        UserDao userDao = userDaoFactory.getUserDao();
        //        userDao.save();
        ApplicationContext ac=new ClassPathXmlApplicationContext("application.xml");
        UserDao userDao = (UserDao)ac.getBean("userDao");
        userDao.save();
    }
}

4.2.4 实现FactoryBean<T>方式【扩展,了解】

  • 定义UserDaoFactoryBean实现FactoryBean<UserDao>

UserDaoFactoryBean中实例化什么类型的对象泛型就是该类型。

//FactoryBean创建对象
public class UserDaoFactoryBean implements FactoryBean<UserDao> {
    //代替原始实例工厂中创建对象的方法
    public UserDao getObject() throws Exception {
        return new UserDaoImpl();
    }
​
    public Class<?> getObjectType() {
        return UserDao.class;
    }
}
  • applicationContext.xml配置

<!--方式四:使用FactoryBean实例化bean-->
<bean id="userDao" class="com.by.factory.UserDaoFactoryBean"/>

使用之前的AppForInstanceUser测试类去运行看结果就行了。注意配置文件中id="userDao"是否重复。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/698109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xcall脚本和xsync脚本 linux

一、xcall脚本 在cd /usr/local/bin/路径下创建xcall vim /usr/local/bin/xcall #!/bin/bash for host in hadoop100 hadoop101 hadoop102 doecho $host ssh $host jps done …

网络攻击与防御措施及防御产品

网络攻击与防御措施及产品 思维导图模板_ProcessOn思维导图、流程图分析了攻击类型、并列出了对不同的攻击方法的防御措施&#xff0c;和可以使用的安全设备。https://www.processon.com/view/649ba05dabde99162f8aecba

Java字节码分析快速入门/字节码执行分析(一)

目录 什么是字节码&#xff1f; 为什么要了解字节码&#xff1f; 如何查看字节码&#xff1f; 字节码包括哪些内容&#xff1f; 总结 hello读者盆友们&#xff0c;在上一篇文章[Java基础]面向对象-内存解析_小王师傅66的博客-CSDN博客最后&#xff0c;我们通过查看字节码&…

2022版本的unity里面的snap setting在哪

1.2022版本的unity 在scene 里面图中画圈的位置。 2.点击后效果如图。

数据库实验—存储过程

创建下列存储过程&#xff1a; 查询某位学生指定课程的成绩和学分&#xff08;修正&#xff1a;若该学生的课程成绩小于60分&#xff0c;则学分要显示为0分&#xff09; 提示&#xff1a;使用CASE…WHEN 例如&#xff1a;分别查询’张建国’和’李平方’选修的’数据库系统原理…

chatgpt赋能python:Python退出venv指南:安全退出虚拟环境

Python退出venv指南&#xff1a;安全退出虚拟环境 作为一名有10年Python编程经验的工程师&#xff0c;我很清楚地明白通过venv管理Python虚拟环境的好处。虚拟环境为每个项目提供了一个独立的Python运行时环境&#xff0c;这可以避免项目之间的依赖冲突&#xff0c;并且可以轻…

canvas图形等距、间距测量

首先定义画线&#xff08;实线、虚线&#xff09;、画面&#xff08;矩形块&#xff09;、值&#xff08;距离&#xff09;等渲染数据结构&#xff08;渲染数据只提供坐标信息和一些基本样式属性&#xff0c;不需要依赖渲染是dom&#xff0c;还是canvas或webgl&#xff09;侦测…

C语言:调整数组使奇数全部都位于偶数前面

题目&#xff1a; 输入一个整数数组&#xff0c;实现一个函数&#xff0c; 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分&#xff0c; 所有偶数位于数组的后半部分。 &#xff08;奇数在数组前面&#xff0c;偶数在数组后面&#xff09; 思路&#xff1a;…

【shell】expect命令详解:用expect实现自动化交互式操作

文章目录 一. 运用场景二. 语法说明三. 例子1. scp文件传输自动化2. ssh远程登录3. 切到root用户4. 创建ssh key5. ssh到一个节点创建用户 一. 运用场景 expect主要应用于自动化交互式操作的场景&#xff0c;借助Expect处理交互的命令&#xff0c;可以将交互过程如&#xff1a…

FPGA的软核、硬核、固核

“核” 现在的FPGA设计&#xff0c;规模巨大而且功能复杂&#xff0c;因此设计的每一个部分都从头开始是不切实际的。一种解决的办法是&#xff1a;对于较为通用的部分可以重用现有的功能模块&#xff0c;而把主要的时间和资源用在设计中的那些全新的、独特的部分。这就像是你在…

Golang:cannot find main module; see ‘go help modules‘解决

出现这个的原因就是之前在Golang语言介绍、环境搭建以及编译工具&#xff08; CDN 加速代理&#xff09;https://mp.csdn.net/mp_blog/creation/editor/131431492 这个部分配置CDN加速代理的时候&#xff0c;开启了GO111MODULEon后&#xff1b; go会忽略GOPATH和vendor文件夹&…

问题杂谈(三十五)Linux中文乱码问题

前言&#xff1a; 如下&#xff0c;系统的中文描述是乱码 步骤&#xff1a; 输入locale&#xff0c;如有zh cn 表示已经安装了中文语言 如果没有&#xff0c;通过yum groupinstall chinese-support下载 临时更换语言&#xff1a;输入LANG"en_US.UTF-8"系统设置&a…

【python docker error】最近出现docker拉取python官方镜像出现运行程序容器无法跑起来的现象

最近出现docker拉取python官方镜像出现运行程序容器无法跑起来的现象 官方在最近也就是2023年6月初将docker的python镜像由debian的buster版本切换到bookworm版本&#xff0c;导致一众的用户发现使用官方python的基础镜像的容器启动报错&#xff0c;我也是受害者之一。解决办法…

机器视觉初步10:目标跟踪

目标跟踪是计算机视觉中的一个重要领域&#xff0c;主要目的是在视频序列中跟踪一个或多个目标对象。常见的目标跟踪方法分为三类&#xff1a;非机器学习方法、机器学习方法和深度学习方法1。 文章目录 1.非机器学习方法a) 光流法&#xff08;Optical Flow&#xff09;b) Haar…

【瑞萨RA_FSP】RTC——实时时钟

文章目录 一、RTC简介1. RTC 特性 二、RTC的结构框图1. RTC引脚2. 时钟分频3. 日历计数器/二进制计数器4. 闹钟功能 三、实验&#xff1a;用RTC提供日历时间1. 硬件设计2. 文件结构3. FSP配置4. 宏定义5. 初始化RTC6. RTC中断回调函数7. hal_entry函数 一、RTC简介 RA6M5 的RT…

虚幻引擎(UE5)-大世界分区WorldPartition教程(一)

文章目录 WC与WP的区别一、如何开启WP1.默认创建WP2.手动创建WP3.转换创建WP 二、设置World Partition参数三、启动流送总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 WC与WP的区别 WorldCompostion&#xff08;WC&#xff09; 是UE4中制作大世界…

【java实战】emoj表情导致mySQL存储错误,完美解决

MySQL表的编码格式为utf-8,现在表内数据量巨大&#xff0c;已不能新建表更改表的编码格式。 采用手动编码将有问题的数据转化为utf8进行存储 工具类 import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util…

大数据Doris(五十):Export导出原理

文章目录 Export导出原理 一、原理 二、查询计划拆分 三、查询计划执行 Export导出原理 Doris Export、Select Into Outfile、MySQL dump三种方式数据导出。用户可以根据自己的需求导出数据。此外数据还可以以文件形式通过Borker备份到远端存储系统中&#xff0c;之后可以…

Gitlab升级报错一:rails_migration[gitlab-rails] (gitlab::database_migrations line 51)

Gitlab-ce从V14.0.12升级到V14.3.6或V14.10.5时报错&#xff1a;如下图&#xff1a; 解决办法&#xff1a; 先停掉gitlab: gitlab-ctl stop 单独启动数据库&#xff0c;如果不单独启动数据库&#xff0c;就会报以上错误 sudo gitlab-ctl start postgresql 解决办法&#x…

哈工大计算机网络课程网络层协议详解之:互联网控制报文协议(ICMP)

哈工大计算机网络课程网络层协议详解之&#xff1a;互联网控制报文协议&#xff08;ICMP&#xff09; 在互联网中&#xff0c;IP数据报的传输很容易出现差错&#xff0c;当出现差错时&#xff0c;最简单的处理办法就是对该IP数据报进行丢弃。但是&#xff0c;并不是直接丢弃就…