Spring IOC容器-Bean管理——基于XML方式
Spring IOC容器-Bean管理——基于XML(续集)
1、IOC 操作 Bean 管理(FactoryBean)
1)、Spring 有两种类型 bean,一种普通 bean,另外一种工厂 bean(FactoryBean)
2)、普通 bean:在配置文件中定义 bean 类型就是返回类型
3)、工厂 bean:在配置文件定义 bean 类型可以和返回类型不一样 第一步 创建类,让这个类作为工厂 bean,实现接口 FactoryBean 第二步 实现接口里面的方法,在实现的方法中定义返回的 bean 类型
public class MyBean implements FactoryBean<Course> {//定义返回bean@Overridepublic Course getObject() throws Exception {Course course = new Course();course.setCname("abc");return course;}
}
<bean id="myBean" class="com.atguigu.spring5.factorybean.MyBean">
</bean>
@Test
public void test3() {ApplicationContext context =new ClassPathXmlApplicationContext("bean3.xml");Course course = context.getBean("myBean", Course.class);//返回值类型可以不是定义的bean类型!System.out.println(course);
}
2、IOC 操作 Bean 管理(bean 作用域)
在 Spring 里面,默认情况下,bean 是单实例对象,下面进行作用域设置:
(1)在 spring 配置文件 bean 标签里面有属性(scope)用于设置单实例还是多实例
(2)scope 属性值 第一个值 默认值,singleton,表示是单实例对象 第二个值 prototype,表示是多实例对象
<bean id="book" class="com.atguigu.spring5.collectiontype.Book" scope="prototype"><!--设置为多实例--><property name="list" ref="bookList"></property>
</bean>
(3)singleton 和 prototype 区别
a)singleton 单实例,prototype 多实例
b)设置 scope 值是 singleton 时候,加载 spring 配置文件时候就会创建单实例对象 ;设置 scope 值是 prototype 时候,不是在加载 spring 配置文件时候创建对象,在调用 getBean 方法时候创建多实例对象
3、IOC 操作 Bean 管理(bean 生命周期)
1、生命周期 :从对象创建到对象销毁的过程
2、bean 生命周期
(1)通过构造器创建 bean 实例(无参数构造)
(2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
(3)调用 bean 的初始化的方法(需要进行配置初始化的方法)
(4)bean 可以使用了(对象获取到了)
(5)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
3、演示 bean 生命周期 :
public class Orders {//无参数构造public Orders() {System.out.println("第一步 执行无参数构造创建 bean 实例");}private String oname;public void setOname(String oname) {this.oname = oname;System.out.println("第二步 调用 set 方法设置属性值");}//创建执行的初始化的方法public void initMethod() {System.out.println("第三步 执行初始化的方法");}//创建执行的销毁的方法public void destroyMethod() {System.out.println("第五步 执行销毁的方法");}}
public class MyBeanPost implements BeanPostProcessor {//创建后置处理器实现类@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println("在初始化之前执行的方法");return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println("在初始化之后执行的方法");return bean;}
}
<!--配置文件的bean参数配置-->
<bean id="orders" class="com.atguigu.spring5.bean.Orders" init-method="initMethod" destroy-method="destroyMethod"> <!--配置初始化方法和销毁方法--><property name="oname" value="手机"></property><!--这里就是通过set方式(注入属性)赋值-->
</bean><!--配置后置处理器-->
<bean id="myBeanPost" class="com.atguigu.spring5.bean.MyBeanPost"></bean>
@Testpublic void testBean3() {// ApplicationContext context =
// new ClassPathXmlApplicationContext("bean4.xml");ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("bean4.xml");Orders orders = context.getBean("orders", Orders.class);System.out.println("第四步 获取创建 bean 实例对象");System.out.println(orders);//手动让 bean 实例销毁context.close();}
4、bean 的后置处理器,bean 生命周期有七步 (正常生命周期为五步,而配置后置处理器后为七步)
(1)通过构造器创建 bean 实例(无参数构造)
(2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
(3)把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization
(4)调用 bean 的初始化的方法(需要进行配置初始化的方法)
(5)把 bean 实例传递 bean 后置处理器的方法 postProcessAfterInitialization
(6)bean 可以使用了(对象获取到了)
(7)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
5、IOC 操作 Bean 管理(外部属性文件)
方式一:直接配置数据库信息 :(1)配置Druid(德鲁伊)连接池 (2)引入Druid(德鲁伊)连接池依赖 jar 包
<!--直接配置连接池--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/userDb"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean>
方式二:引入外部属性文件配置数据库连接池
(1)创建外部属性文件,properties 格式文件,写数据库信息(jdbc.properties)
prop.driverClass=com.mysql.jdbc.Driver
prop.url=jdbc:mysql://localhost:3306/userDb
prop.userName=root
prop.password=root
(2)把外部 properties 属性文件引入到 spring 配置文件中 —— 引入 context 名称空间
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!--引入context名称空间--><!--引入外部属性文件--><context:property-placeholder location="classpath:jdbc.properties"/><!--配置连接池--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${prop.driverClass}"></property><property name="url" value="${prop.url}"></property><property name="username" value="${prop.userName}"></property><property name="password" value="${prop.password}"></property></bean></beans>
Spring IOC容器-Bean管理——基于XML方式相关推荐
- spring IOC容器 Bean 管理——基于注解方式
IOC 操作 Bean 管理(基于注解方式) 1.什么是注解 (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值-) (2)使用注解,注解作用在类上面,方法上面, ...
- spring基础Bean管理基于xml注入
1.基于xml注入属性 1.什么是Bean管理 Bean管理指的是两个操作 (1) Spring创建对象 (2) Spirng注入属性 2.Bean管理操作有两种方式 (1)基于xml配置文件方式实现 ...
- spring的IOC容器Bean管理(基于xml方式)
==目的:==降低耦合度 ==技术:==xml解析.工厂模式.反射 ioc容器的实现 spring框架提供了两种实现方式(两个接口) BeanFactory接口 ioc容器的基本实现,是spring框 ...
- [Spring5]IOC容器_Bean管理XML方式_自动装配
IOC操作Bean管理(xml自动装配) package com.atguigu.spring.autowire;public class Dept {@Overridepublic String t ...
- Spring IOC容器和Bean的配置
Spring IOC容器 和Bean的配置 : IOC和DI IOC(Inversion of Control):反转控制 在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的 ...
- Spring IoC容器与Bean管理
Spring IoC容器与Bean管理 一.Spring IoC容器与Bean管理 1.Spring快速入门 IoC控制反转 DI依赖注入 Spring概述 Spring IoC初体验 使用XML方式 ...
- [Spring5]IOC容器_Bean管理XML方式_创建对象_set注入属性and有参构造注入属性
IOC操作 Bean管理 什么是Bean管理 1.Bean管理指的是两个操作: a.Spring创建对象 b.Spring注入属性 2.Bean管理操作有两种方式 a.基于xml配置文件方式实现 b. ...
- IOC操作Bean管理XML方式(bean 的生命周期)
目录 IOC操作Bean管理XML方式(bean 的生命周期) 1.bean 的生命周期(在单例模式下的生命周期) (1)通过构造器创建 bean 的实例(执行类中无参构造方法去创建对象) (2)为 ...
- IOC操作Bean管理XML方式(创建对象和set注入属性)
目录 1.什么是 Bean 管理: (1)通过 Spring 创建对象 (2)通过 Spring 注入属性 2.IOC 操作 Bean 管理有两种方式: (1)基于 xml 配置文件方式实现 (1.1 ...
最新文章
- 偏见与人类大脑结构有关
- Bytom BIP-32协议和BIP-44协议解读
- 计算机技能训练B会学什么,计算机入门及操作技能训练模拟试题.pdf
- Java Thread源码分析
- C/C++实现图的广度和深度遍历
- VirtualBox使用技巧
- OGRE 入门 二、Basic Tutorial 1 : An introduction to the most basic Ogre constructs
- CVPR2019 Oral!伯克利、麻省理工GAN图像合成最新成果(附开源代码)!
- java 6和_java都到6了 有什么不同 哦????
- Resource Hacker
- .NET 排序 Array.Sort<T> 实现分析
- Apache 别名与重定向
- java原始套接字打开_原始套接字-IP头包含选项
- centos7开启网卡命令_centos7如何启动网卡
- 这些信用卡取现可以免除手续费!
- PHP——AES加解密 +SIGN校验唯一性安全性(Api)
- MultipartFile transferTo() FileNotFound 拒绝访问
- 智能指针之atuo_ptr源码剖析
- 用Keil工具搭建S3C2440编译环境
- R语言学习| 马氏距离mahanobis函数
热门文章
- thymeleaf if判断_Thymeleaf入门——入门与基本概述
- Android ble连接过程,Android开发之ble蓝牙
- CPU 和 GPU频率设置
- python比特币挖矿_比特币如何挖矿(挖矿原理)-工作量证明
- vant表单组件+iconfont组合使用 - 代码篇
- font-familly:' 阿里巴巴-普惠体 '【永久免费 】 - 下载与使用
- vue页面渲染(请求返回的后端)data,文本换行与显示bug 的分析与解决提示
- clistctrl获取选中行数据_大神,Excel数据怎么对比?
- PHP二维码在线制作生成系统源码 无需数据库 带logo图标
- 海洋CMS仿爱美剧网站模板源码