当前位置: 移动技术网 > IT编程>开发语言>Java > Spring(三)

Spring(三)

2018年09月11日  | 移动技术网IT编程  | 我要评论

比基尼包裹下的中国躯体,parkour读音,角蜡蚧

spring bean的生命周期

1.需要的实体类

 

ackage com.xdf.bean;

import org.springframework.beans.beansexception;
import org.springframework.beans.factory.*;

/**
 * 学生的实体类
 *
 * aware本意就是察觉,感觉
 * 01.实现了beannameaware,就是让student类感觉到自己在容器中的id或者是name
 * 02.实现了beanfactoryaware,就是让student类感觉到自己在容器中所属的bean工厂
 * 03.实现了initializingbean,就是为了执行初始化之后的操作 ,但是对spring产生了依赖
 *         后续使用反射机制 init-method 来消除对spring的依赖
 * 04.实现了disposablebean,就是为了执行bean销毁之后的操作 ,但是对spring产生了依赖
 *         后续使用反射机制 destroy-method 来消除对spring的依赖
 */
public class student implements beannameaware,beanfactoryaware,initializingbean,disposablebean{
    private  int  age;  //年龄
    private  string  stuname; //姓名

    private  string  beanname; //bean在容器中的id或者name
    private beanfactory beanfactory; //bean所在的工厂

    public student() {
        system.out.println("===student类中的无参构造===");
    }

    //beannameaware接口中的setbeanname()
    public void setbeanname(string beanname) {
        system.out.println("===执行了beannameaware接口中的setbeanname()===");
        this.beanname=beanname;
    }

    //beanfactoryaware中的setbeanfactory()
    public void setbeanfactory(beanfactory beanfactory) throws beansexception {
        system.out.println("===执行了beanfactoryaware中的setbeanfactory()===");
        this.beanfactory=beanfactory;
    }


    public void initmethod(){
        system.out.println("===student类中的initmethod()===");
    }

    public void afterpropertiesset() throws exception {
        system.out.println("===initializingbean中的afterpropertiesset()===");
    }

    public  void mydestroy(){
        system.out.println("===student类中的mydestroy()===");
    }

    public void destroy() throws exception {
        system.out.println("===disposablebean中的destroy()===");
    }

    public int getage() {
        return age;
    }

    public void setage(int age) {
        system.out.println("===student类中给属性赋值 setage()===");
        this.age = age;
    }

    public string getstuname() {
        return stuname;
    }

    public void setstuname(string stuname) {
        system.out.println("===student类中给属性赋值 setstuname()===");
        this.stuname = stuname;
    }

    public string getbeanname() {
        return beanname;
    }

    public beanfactory getbeanfactory() {
        return beanfactory;
    }

    @override
    public string tostring() {
        return "student{" +
                "age=" + age +
                ", stuname='" + stuname + '\'' +
                '}';
    }

2.需要的instantiationawarebeanpostprocessoradapter

 

package com.xdf.bean;

import org.springframework.beans.beansexception;
import org.springframework.beans.propertyvalues;
import org.springframework.beans.factory.config.instantiationawarebeanpostprocessoradapter;

import java.beans.propertydescriptor;

/**
 * bean实例化之前 和之后
 */
public class myinitawarebeanpostadpater  extends instantiationawarebeanpostprocessoradapter{

    public  myinitawarebeanpostadpater(){
        system.out.println("*****myinitawarebeanpostadpater的无参构造*****");
    }


    //在实例化bean之前调用
    @override
    public object postprocessbeforeinstantiation(class<?> beanclass, string beanname) throws beansexception {
        system.out.println("*****执行了myinitawarebeanpostadpater的 postprocessbeforeinstantiation *****");
        return null; //底层返回的就是null
    }


    //在实例化bean之后调用
    @override
    public object postprocessafterinitialization(object bean, string beanname) throws beansexception {
        system.out.println("*****执行了myinitawarebeanpostadpater的 postprocessafterinitialization *****");
        return bean;
    }
    @override
    public propertyvalues postprocesspropertyvalues(propertyvalues pvs, propertydescriptor[] pds, object bean, string beanname) throws beansexception {
        system.out.println("*****执行了myinitawarebeanpostadpater的 postprocesspropertyvalues *****");
        return pvs;
    }

}

 

3.需要的beanpostprocessor

 

package com.xdf.bean;

import org.springframework.beans.beansexception;
import org.springframework.beans.factory.config.beanpostprocessor;

/**
 * processor  本意是加工 处理的意思!
 *
 * 实现了beanpostprocessor
 */
public class mybeanpostprocessor implements beanpostprocessor {
    public mybeanpostprocessor(){
        system.out.println("===mybeanpostprocessor的无参构造方法 ===");
    }

    public object postprocessbeforeinitialization(object bean, string beanname) throws beansexception {
        system.out.println("===执行了beanpostprocessor中的 postprocess ==before==initialization  ===");
        return bean;
    }

    public object postprocessafterinitialization(object bean, string beanname) throws beansexception {
        system.out.println("===执行了beanpostprocessor中的 postprocess ==after==initialization  ===");
        return bean;
    }
}

 

4.需要的beanfactorypostprocessor

 

package com.xdf.bean;

import org.springframework.beans.beansexception;
import org.springframework.beans.factory.config.beandefinition;
import org.springframework.beans.factory.config.beanfactorypostprocessor;
import org.springframework.beans.factory.config.beanpostprocessor;
import org.springframework.beans.factory.config.configurablelistablebeanfactory;

/**
 * processor  本意是加工 处理的意思!
 *
 * 实现了beanfactorypostprocessor   工厂的后处理器
 */
public class mybeanfactorypostprocessor implements beanfactorypostprocessor {
    public mybeanfactorypostprocessor(){
        system.out.println("===mybeanfactorypostprocessor的无参构造方法 ===");
    }


    public void postprocessbeanfactory(configurablelistablebeanfactory beanfactory) throws beansexception {
        system.out.println("===mybeanfactorypostprocessor的postprocessbeanfactory ===");
        beandefinition beandefinition = beanfactory.getbeandefinition("student");
        beandefinition.getpropertyvalues().addpropertyvalue("stuname","小白");
    }
}

 

5.需要的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"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemalocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--配置mybeanpostprocessor   容器级别的 当前xml文件中所有的bean都会执行mybeanpostprocessor中的方法-->
    <bean class="com.xdf.bean.mybeanpostprocessor"/>
    <!--配置mybeanfactorypostprocessor 容器级别的  同上-->
    <bean class="com.xdf.bean.mybeanfactorypostprocessor"/>
    <!--配置myinitawarebeanpostadpater  容器级别的  同上-->
    <bean class="com.xdf.bean.myinitawarebeanpostadpater"/>



    <!-- 配置student 的实体对象-->
    <bean id="student" class="com.xdf.bean.student" init-method="initmethod" destroy-method="mydestroy">
         <property name="age" value="20"/>
         <property name="stuname" value="小黑"/>
    </bean>
</beans>

 

6.需要的测试代码

 

/**
 * 测试bean生命周期
 */
public class lifecycle {

    public static void main(string[] args) {
        applicationcontext  context=new classpathxmlapplicationcontext("spring.xml");
        student student= context.getbean("student", student.class);
        system.out.println(student);
        ((classpathxmlapplicationcontext)context).close();  //关闭容器
    }
}

   

    未完待续!!!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网