03-spring bean
目录
- 一、spring 基于 xml 的 IOC 环境搭建和入门
- 1.pom.xml
- 2.类
- 3. bean.xml
- 4.主函数
- 5.总结
- 二、BeanFactory和ApplicationContext的区别
- 三、spring 中 bean 的细节之三种创建 Bean 对象的方式
- 1. 第一种方式:使用默认构造函数创建。
- 2.第二种方式:
- 3.第三种方式:
- 四、spring中bean的细节之作用范围
- 1.bean标签订单scope属性:
- 2.bean 对象的生命周期
- Ⅰ单例对象
- Ⅱ多例对象
一、spring 基于 xml 的 IOC 环境搭建和入门
1.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>spring02</groupId><artifactId>spring02</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.9.RELEASE</version></dependency></dependencies></project>
2.类
将上次的耦合和解耦的笔记放进去
3. bean.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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--把对象的创建交给 spring 来管理--><bean id="accountService" class="com.service.impl.AccountServiceImpl"/><bean id="accountDao" class="com.dao.impl.AccountDaoImpl"/>
</beans>
4.主函数
public class Client {/*** 获取 spring 的 ioc 核心容器,并根据 id 获取对象* @param args*/public static void main(String[] args) {ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");IAccountService accountService=(IAccountService)ac.getBean("accountService");IAccountDao accountDao=ac.getBean("accountDao",IAccountDao.class);System.out.println(accountService);System.out.println(accountDao);}
}
5.总结
ApplicationContext的三个常用实现类:
ClassPathXmlApplicationContext:他可以加载类路径下的配置文件,要求配置文件必须在类路径下,不在的话,加载不了。
- FileSystemXmlApplicationContext:他可以加载磁盘任意路劲下的配置文件(必须有访问权限)
AnnotationConfigApplicationContext:它是用于读取注解创建容器的。
获取配置文件对应实现类有两种方法:
- 强制转换
- IAccountService accountService=(IAccountService)ac.getBean("accountService");
- IAccountDao accountDao=ac.getBean("accountDao",IAccountDao.class);
二、BeanFactory和ApplicationContext的区别
public static void main(String[] args) {ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");IAccountService accountService=(IAccountService)ac.getBean("accountService");IAccountDao accountDao=ac.getBean("accountDao",IAccountDao.class);System.out.println(accountService);System.out.println(accountDao);/*-------BeanFactory-------------*/Resource resource=new ClassPathResource("bean.xml");BeanFactory beanFactory=new XmlBeanFactory(resource);IAccountService as=(IAccountService)beanFactory.getBean("accountService");System.out.println(as);}
}
核心容器接口两个引发出的问题:
ApplicationContext: (单例对象适用)
他在创建核心容器时,创建对象采取的策略是采用立即加载的方式。也就是说,只要一读完配置文件马上就创建配置文件的对象。
BeanFactory: (多例对象适用)
他在创建核心容器时,创建对象采取的策略是采用延迟加载的方式。也就是说,什么时候根据 id 获取对象了,什么时候才真正的创建对象。
三、spring 中 bean 的细节之三种创建 Bean 对象的方式
1. 第一种方式:使用默认构造函数创建。
- 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。 采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建
<bean id="accountService" class="com.service.impl.AccountServiceImpl"/>
<bean id="accountDao" class="com.dao.impl.AccountDaoImpl"/>
2.第二种方式:
- 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)
package com.factory;import com.service.IAccountService;
import com.service.impl.AccountServiceImpl;/*
模拟一个工厂类(该类可能存在于jar包中,我们无法通过修改源码的方式来提供默认构造函数)
*/
public class InstanceFactory {public IAccountService getAccountService(){return new AccountServiceImpl();}
}
<bean id="instanceFactory" class="com.factory.InstanceFactory"/>
<bean id="accountService2" factory-bean="instanceFactory" factory-method="getAccountService"/>
3.第三种方式:
- 使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)
package com.factory;import com.service.IAccountService;
import com.service.impl.AccountServiceImpl;/*
模拟一个工厂类(该类可能存在于jar包中,我们无法通过修改源码的方式来提供默认构造函数)
*/
public class StaticFactory {public static IAccountService getAccountService(){return new AccountServiceImpl();}
}
<bean id="accountService3" class="com.factory.StaticFactory" factory-method="getAccountService"/>
四、spring中bean的细节之作用范围
bean 的作用范围调整
1.bean标签订单scope属性:
作用:用于指定bean作用范围 取值:常用的就是单例的于多例的
singleton:单例的(默认值)
prototype:多例的
request:作用与web应用的请求范围
session:作用于web应用的会话范围
global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,它就是session
对于 global-session 的理解
global session 可以理解为全局 session
2.bean 对象的生命周期
Ⅰ单例对象
出生:当容器创建时对象出生
活着:只要容器还在,对象一直活着
死亡:单例对象的生命周期和容器相同多例对象
实现类
public class AccountServiceImpl implements IAccountService {private IAccountDao accountDao=new AccountDaoImpl();public void saveAccount() {accountDao.saveAccount();}public void init(){System.out.println("对象初始化");}public void destroy(){System.out.println("对象销毁");}
}
xml 文件
<bean id="accountService" class="com.service.impl.AccountServiceImpl" scope="singleton"init-method="init" destroy-method="destroy"/><bean id="accountDao" class="com.dao.impl.AccountDaoImpl"/>
主函数
public class Client {public static void main(String[] args) {ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");IAccountService as=ac.getBean("accountService",IAccountService.class);as.saveAccount();ac.close();}
}
运行结果
对象初始化
保存成功
对象销毁
Ⅱ多例对象
出生:当我们使用时 spring 框架为我们创建
活着:对象只要是在使用过程中就一直活着
死亡:当对象长时间不用,且没有别的对象引用时,由Java的垃圾回收器回收
转载于:https://www.cnblogs.com/zuiren/p/11415413.html
03-spring bean相关推荐
- 学妹问的Spring Bean常用配置,我用最通俗易懂的讲解让她学会了
你好呀,我是沉默王二,一枚有趣的程序员,写的文章一直充满灵气,力求清新脱俗.昨天跑去王府井的小米店订购了一台小米 10,说是一周之内能到货,但我还是忍不住今天就想见到她.见我茶不思饭不想的,老婆就劝我 ...
- spring Bean自动装配
spring Bean自动装配 自动装配是使用spring满足bean依赖的一种方式. spring会在应用上下文中为某个bean寻找其依赖的bean. spring自动装配需要从两个角度来实现,或者 ...
- Spring Bean 中的线程安全
在 使用Spring框架时,很多时候不知道或者忽视了多线程的问题.因为写程序时,或做单元测试时,很难有机会碰到多线程的问题,因为没有那么容易模拟多线 程测试的环境.但如果不去考虑潜在的漏洞,它就会变成 ...
- Spring Bean配置方式之一:Java配置
简介: Spring bean 是使用传统的 XML 方法配置的.在这篇文章中,您将学习使用基于纯 Java 的配置而非 XML 来编写 Spring bean 并配置它们.本文将介绍可用来配置 be ...
- Spring bean 实现生命周期的三种解决方案
Spring bean 实现生命周期的三种解决方案 参考文章: (1)Spring bean 实现生命周期的三种解决方案 (2)https://www.cnblogs.com/javawebsoa/a ...
- Spring ----Bean的生命周期
这Spring框架中,一旦把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理, 一般担当管理者角色的是BeanFactory或ApplicationConte ...
- 【Spring实战】注入非Spring Bean对象
2019独角兽企业重金招聘Python工程师标准>>> 大家经常用到Spring IOC去管理对象之间的依赖关系,但一般情况下都有一个前提:这些Bean对象必须是通过Spring容器 ...
- spring bean作用域_Spring面试知识点,这是我见过最全面的 - 知识铺
知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停地来唤醒记忆深处的知识点. Q1.什么是Spring框架? Spring是最流行的企业应用程序框架之一.Spring ...
- 【一步一步学习spring】spring bean管理(上)
1. spring 工厂类 我们前边的demo中用到的spring 工厂类是ClassPathXmlApplicationContext,从上图可以看到他还有一个兄弟类FileSystemApplic ...
- Spring bean加载多个配置文件
在一个大的项目结构,Spring bean配置文件位于不同的文件夹以便于维护和模块化.例如,Spring-Common.xml在common 文件夹中,Spring-Connection.xml 在c ...
最新文章
- python中outside loop_Python: 'break' outside loop
- 你必须会的启发式搜索算法--A*算法
- java程序的运行结果依赖操作系统吗_java模拟试卷及答案及解析4
- Maven中的dependencyManagement 意义
- [驱动注册]platform_driver_register()与platform_device_register()
- 【python图像处理】图像的读取、显示与保存
- 构造函数= default;_Python Collections之defaultdict 和 default_factory关系
- hadoop hive集群_基于伪分布式Hadoop搭建Hive平台详细教程
- mysql复制学习二 安装及首次复制配置
- TypeError: 'float' object is not iterable
- [转]细说Redis监控和告警
- JS学习总结(14)——Events事件
- CodeBlock调试(DeBug)指南
- 点云配准(四) 四元数与旋转变换
- 晶体二极管及其基本应用电路
- thinkphp 3.2引入第三方类
- 遍历vad二叉树来遍历进程里的模块
- 小红书java算法难吗_Java面试系列之记一次小红书之旅
- 使用Android拨打电话功能
- 某游戏客户流失情况数据分析
热门文章
- ecshop 删除订单时提示“以下订单无法被移除”的解决办法
- [转载] 七龙珠第一部——第092话 孙悟空上场了
- 黑马程序员-面向对象-06天-3(static-静态代码块)
- CSS选择器(转载)
- jquery 选项卡插件
- js中的异常处理try...catch使用介绍
- 利用getLayoutParams()方法和setLayoutParams()方法
- android LayoutInflater.inflate()的参数及其用法
- Float构建三栏DIV CSS网页布局
- C语言中不安全的函数