03 Spring框架 bean的属性以及bean前处理和bean后处理

上一节我们给出了三个小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对象产生配置)。

版权声明:本文为博主原创文章,如需转载请表明出处。 https://blog.csdn.net/qq_39266910/article/details/77745245

原文地址:https://www.cnblogs.com/chengshun/p/9776124.html

时间: 2024-10-09 17:22:14

03 Spring框架 bean的属性以及bean前处理和bean后处理的相关文章

跟着刚哥学习Spring框架--通过XML方式配置Bean(三)

Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式   √ id:标识容器中的bean.id唯一. √ class:bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须有无参的构造器 2.依赖注入的方式 1)属性注入:通过setter方法注入Bean的属性值或依赖的对象 属性注入使用<Property>元素,使用name指定Bean的属性名称,使用value指定Bean的属

[原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Spring框架—— IOC容器和Bean的配置

 1 IOC和DI ①IOC(Inversion of Control):反转控制. 在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率. 反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向--改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效

Spring配置中的bean直接引用其它bean的属性值

pring配置中的bean直接引用其它bean的属性值来赋值给当前bean的属性,也可以直接调用其它bean的方法获取返回值来赋值给当前bean的属性,并且可以进行参数传递,这样可以省去在bean中注入需要获取属性值的bean. 以下是一个完整的示例: 1.需要JAVA类: Spring配置中的bean直接引用其它bean的属性值 package com.service.test; public class Bean1 { int v1 = 1; public int getV1() { ret

Spring框架笔记(四)——Spring容器的属性配置详解的六个专题

在spring IOC容器的配置文件applicationContext.xml里,有一些配置细节值得一提.我们将一些问题归结为以下几个专题. 专题一:字面值问题 配置的bean节点中的值,我们提出一个概念--字面值. 字面值:可用字符串表示的值. 字面值可以通过 <value> 元素标签或 value 属性进行注入. 基本数据类型及其封装类.String 等类型都可以采取字面值注入的方式 若字面值中包含特殊字符,可以使用 <![CDATA[]]> 把字面值包裹起来. 例如:(本文

[JavaEE] IBM - Spring 系列: Spring 框架简介

Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级的.强壮的 J2EE 应用程序.developerWorks 的定期投稿人 Naveen Balani 通过介绍 Spring 框架开始了他由三部分组成的 Spring 系列,其中还将介绍 Spring 面向方面的编程(AOP)和控制反转(IOC)容器. Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一

Spring框架使用ByName自动注入同名问题剖析

问题描述 ??我们在使用spring框架进行项目开发的时候,为了配置Bean的方便经常会使用到Spring当中的Autosire机制,Autowire根据注入规则的不同又可以分为==ByName==和==ByType==这两种机制(两者的用法和区别可以参考[email protected]官方文档).但大家在使用Autowire当中==ByName==机制的时候有没有思考过这样一个问题,当我们配置了两个name属性相同的Bean,Spring在自动注入的时候会采取怎样处理方式?会覆盖?还是抛出异

Spring 系列: Spring 框架简介

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. 在这篇由三部分组成的 Spring 系列 的第 1 部分中,我将介绍 Spring 框架.我先从框架底层模型的角度描述该框架的功能,然后将讨论两个最有趣的模块:Spring 面向方面编程(AOP)和控制反转 (IOC) 容器.接着将使用几个示例演示 IOC 容器在典型应用程序用例场景中的应用情况.这些示例还将成

Spring 框架简介

https://www.ibm.com/developerworks/cn/java/wa-spring1/index.html Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. 在这篇由三部分组成的 Spring 系列 的第 1 部分中,我将介绍 Spring 框架.我先从框架底层模型的角度描述该框架的功能,然后将讨论两个最有趣的模块:Spring 面向方面