03 Spring框架 bean的属性以及bean前处理和bean后处理
整理了一下之前学习spring框架时候的一点笔记。如有错误欢迎指正,不喜勿喷。
上一节我们给出了三个小demo,具体的流程是这样的:
1.首先在aplicationContext.xml中添加<bean id="自定义id" class="包名.类名">。(还有两种工厂配置)
2.其次写一个自定义类,里面只包含一个系统输出的show()。
3.使用
ApplicationContext hw=new classpathXmlApplicationContext("applicationContext.xml");
实例化Spring容器。
4.最后用 HelloWorld hw=(HelloWorld)context.getBean("c1");获得对象,再使用对象hw调用show()方法测试对象是否创建: hw.show();
所以我们可以从上面的例子了解到,先写一个类,然后在applicationContext.xml中添加<bean id="" class="">实例,然后在TestHelloWorld中测试调用。
这个是ioc的最基本的一个流程。
接下来我们介绍bean的相关属性:
①bean在Spring中有两种基本类型(这两种比较常用,其他的我们不作介绍):singleton和prototype(单例和原型),Spring中默认使用单例,若请求为原型,那么Spring就会新建一个bean实例然后返回给程序。
单例和原型可以在bean中用scope属性设置
<bean id="" class="" scope="singleton/prototype">
单例和原型有哪些区别?
(一)他们都能够创建对象,但是单例创建的实例成功后能够重复的使用(即如果已经创建成功,当请求需要再次建立已经创建的实例的话,Spring就检查容器中是否存在这个实例,如果存在就使用已经创建的实例,如果没有就新创建一个实例),而原型,每当有请求需要建创建实例的时候都需要新建一个实例(无论容器中是否存在相同已创建的实例)。
(二)它们创建对象的时机不同,单例在默认在Spring主配置文件被加载的时候就会被创建,而原型则是需要使用的时候创建对象。
②指定对象的初始化方法(用来初始化对象),利用bean中的init-method指定
<bean id="" class="" init-method="">
③指定对象销毁方法(想要指定必须要满足实例组件为单例,并且调用 AbstractApplicationContext容器对象的ac.close触发)
<bean id="" class="" destroy-method="">
④延时创建实例,使用lazy-init=“true”设定默认为false,实例不是立即创建,而是用到时用getBean方法调用创建(控制单例的创建时机)
<bean id="" class="" lazy-init="true">
什么事bean前处理,什么又是bean后处理:
Spring提供了一个接口,我们可以定义一个类,实现这个接口,这个接口提供了两个方法
- postProcessBeforeInitialization
- postProcessAfterInitialization
分别会在对象的创建之前和创建之后调用,
实现这个接口可以帮助我们在一些情况下,在一个对象创建的前后添加一些日志和预处理,或者关闭处理。
接下来我们就来看看这个接口怎么实现:
public class postProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String service) throws BeansException {
System.out.println("after");
return bean;//这里的返回必须为bean
}
@Override
public Object postProcessBeforeInitialization(Object bean, String service) throws BeansException {
System.out.println("before");
return bean;//这里的返回必须为bean
}
}
上面的这个类实现了BeanPostProcessor接口并提供了bean前方法和bean后方法,两个方法的参数都为我们想要生成的对象的引用。
想要使用这个方法,我们不仅需要定义这个类,还要在Spring主配置文件中注册一下:
<bean class="beanBeforeAndAfter.postProcessor"/>
这样在产生bean之间就会输出before和after。
上面就是这个实现类的具体使用方法(省略了具体的bean对象产生配置)
本篇文章就介绍到这里。
03 Spring框架 bean的属性以及bean前处理和bean后处理的更多相关文章
- Spring框架Controller层(表现层)针对方法参数是Bean时HttpServletRequest绑定参数值问题解释
在做项目的时候,有一个需求是将数据库中的信息封装到实体类返回到jsp界面 传过来的参数只是实体类的id属性,然后根据id属性去查数据库,事情就是这样,然后 结果遇到很奇怪的事情,在jsp页面中使用EL ...
- 09 Spring框架 AOP (二) 高级用法
上一篇文章我们主要讲了一点关于AOP编程,它的动态考虑程序的运行过程,和Spring中AOP的应用,前置通知,后置通知,环绕通知和异常通知,这些都是Spring中AOP最简单的用法,也是最常用的东西, ...
- [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 跟着刚哥学习Spring框架--通过XML方式配置Bean(三)
Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式 √ id:标识容器中的bean.id唯一. √ cl ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring Bean的生命周期
Spring 容器可以管理 singleton 作用域 Bean 的生命周期,在此作用域下,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁. 而对于 protot ...
- Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点
Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...
- Spring 系列: Spring 框架简介 -7个部分
Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...
- 如何在spring框架中解决多数据源的问题
在我们的项目中遇到这样一个问题:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库.我们以往在spring和hibernate框架中总是配置一个数据源,因而sessi ...
- Spring框架快速入门之简介
Spring是java平台上的一个开源应用框架.它的第一个版本是由Rod Johnson写出来的.Rod在他的Expert One-On- One Java EE Design and Develop ...
随机推荐
- Split Divisibilities (Project Euler 598)
题目大意: 求将$100!$ 拆成$a*b$的方案数,其中$a<=b$并且它们的约数个数一样多. 思路: 先将$100!$质因数分解, 结果如图: 首先想到一个暴力DP, dp[i][j][k] ...
- DBCP与C3P0数据库连接池
数据库连接池是做什么的? 学过计算机网络的都知道,在一个内部局域网中.大部分用的都是私有地址,要想和外部 打交道,必须要有相应的合法外部地址相相应.然而内部用户数量巨大.一台机子一个外部IP 是不现实 ...
- Charles常用设置
一.软件说明 Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析. 二.mock数据 场景说明: 使用步骤: 1.保存待测试 ...
- Python成长之路(常用模块学习)
Python 拥有很多很强大的模块 主要写一下常用的几个吧 大概就是这些内容了 模块介绍 time &datetime模块 random os sys shutil json & pi ...
- CodeIgniter框架——数据库类(配置+快速入门)
CodeIgniter用户指南——数据库类 数据库配置 入门:用法举例 连接数据库 查询 生成查询结果 查询辅助函数 Active Record 类 事务 表格元数据 字段元数据 自定义函数调用 查询 ...
- 求割点模板(可求出割点数目及每个割点分割几个区域)POJ1966(Cable TV Network)
题目链接:传送门 题目大意:给你一副无向图,求解图的顶点连通度 题目思路:模板(图论算法理论,实现及应用 P396) Menger定理:无向图G的顶点连通度k(G)和顶点间最大独立轨数目之间存在如下关 ...
- 《从零开始学Swift》学习笔记(Day 20)——函数中参数的传递引用
原创文章,欢迎转载.转载请注明:关东升的博客 参数的传递引用 类是引用类型,其他的数据类型如整型.浮点型.布尔型.字符.字符串.元组.集合.枚举和结构体全部是值类型. 有的时候就是要将一个值类型参数以 ...
- 检验指定路径的文件是否存在ftp服务器中
import org.apache.commons.net.ftp.FTP;import org.apache.commons.net.ftp.FTPClient;import org.apache. ...
- 巨蟒django之权限10,内容梳理&&权限组件应用
1.CRM项目内容梳理: 2.权限分配 3.权限组件的应用
- API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd API 网关出现的原因
API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd http://www.infoq.com/cn/articles/compa ...