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 ...
随机推荐
- Graph Visualization
1. 什么是graph visualization? Graph visualization is a way of representing structural information as di ...
- python c example2:pylame2
#include <Python.h> #include <lame.h> //pyton object variables typedef struct{ PyObject_ ...
- Could not calculate build plan
问题:根据你提供的镜像地址,下载相应的jar包失败 原因: 1.你提供的镜像地址不稳定,把settings.xml文件中的mirror改成稳定的镜像地址 2.网络不稳定,重新下载,或者切换网络.
- csla 与高cpu
在项目中一直使用csla 4.13. 项目一直正常,但是偶尔会出现iis占用的cpu 突然100%, 后面客户量大的情况,加入了缓存的机制.100%的情况出现的更多了. 当时有数据库死锁的原因.cpu ...
- Editing a Book UVA - 11212 IDA*
You have n equal-length paragraphs numbered 1 to n . Now you want to arrange them in the order of 1 ...
- 学习spring2--跟我一起学Spring 3(3)–使用Spring开发第一个HelloWorld应用
http://www.importnew.com/13246.html 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 - 首页 所有文章 资讯 ...
- 安装VC6.0遇到的问题
1. 问题现象 安装VC6.0后,又安装了VS2005.用VC6.0打开以前的.dsw文件时,程序自动关闭.如下图所示. 具体操作是:选择一个.dsw文件,右键菜单[打开方式]中选择[Microsof ...
- 远程连接windows时剪贴板失效解决方法
1:打开任务管理器2:找到结束进程rdpclip,找不到可以不管.3:手工新建任务里输入rdpclip,运行即可.
- 强大的find命令
find命令确实很强大,自己懒得计,转载一篇: 原文出处:http://roclinux.cn/?p=18 1. 想查看当前文件夹及子文件夹里有没有文件名为“abc”的文件 # find . -nam ...
- 1. 写出一个能创建多级目录的 PHP 函数(新浪网技术部)
function create_dir($path,$mode){ if (is_dir($path)){ echo "该目录已经存在"; }else{ if(mkdir($pat ...