• Spring之替换Bean的返回结果,替换Bean的方法实例


    Spring是一个非常强悍的框架+容器,其中有代理模式(动态代理模式)的极致体现。下面是两个比较让人感觉精彩的代码使用,重点关注main方法中的ClassPathXMlApplicationContext对象的实例化代码,替换对象方法的代码以及替换对象方法返回值的代码。具体的支持类有ASM、CGLIB、以及Spring3.0 CORE JAR.

    代码如下:
    MainMethod.java
     

    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class MainMethod {
    
    	
    
    	private static StudentBiz studentBiz;
    
    
    
    
    	public void setStudentBiz(StudentBiz studentBiz) {
    
    		MainMethod.studentBiz = studentBiz;
    
    	}
    
    
    
    
    	public static void main(String[] args) {
    
    		new ClassPathXmlApplicationContext("applicationContext.xml");
    
    		System.out.println(studentBiz.getStudent().getName());
    
    		studentBiz.printMsg();
    
    	}
    
    }
    


    SbMethodReplacer.java

    import java.lang.reflect.Method;
    
    
    
    
    import org.springframework.beans.factory.support.MethodReplacer;
    
    
    
    
    
    
    
    public class SbMethodReplacer implements MethodReplacer{
    
    
    
    
    	@Override
    
    	public Object reimplement(Object obj, Method method, Object[] args)
    
    			throws Throwable {
    
    		System.out.println("Hi world!!");
    
    		return null;
    
    	}
    
    	
    
    }


    Student.java

    public class Student {
    
    	private String name;
    
    
    
    
    	public String getName() {
    
    		return name;
    
    	}
    
    
    
    
    	public void setName(String name) {
    
    		this.name = name;
    
    	}
    
    	
    
    }


    StudentBiz.java

    public interface StudentBiz {
    
    	public Student getStudent();
    
    	public void printMsg();
    
    }


    StudentBizImpl.java

    public class StudentBizImpl implements StudentBiz {
    
    
    
    
    	@Override
    
    	public Student getStudent() {
    
    		return null;
    
    	}
    
    
    
    
    	@Override
    
    	public void printMsg() {
    
    		System.out.println("hello world!!");
    
    	}
    
    
    
    
    }


    applicationContext.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:p="http://www.springframework.org/schema/p"
    
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
    
    
    
    	<bean name="sbMethodReplacer" class="SbMethodReplacer"/>
    
    	
    
    	<bean name="student" class ="Student">
    
    		<property name="name"><value>anyone</value></property>
    
    	</bean>
    
    	
    
    	<bean name="studentbiz" class="StudentBizImpl">
    
    		<lookup-method name="getStudent" bean="student"/>
    
    		<replaced-method name="printMsg" replacer="sbMethodReplacer"/>
    
    	</bean>
    
    	
    
    	<bean name="mainM" class="MainMethod">
    
    		<property name="studentBiz" ref="studentbiz"/>
    
    	</bean>
    
    	
    
    </beans>

  • 相关阅读:
    XML基础
    vue项目使用WebViewJavascriptBridge
    vue cli3 打包部署 Failed to load resource: net::ERR_FILE_NOT_FO 找不到路径问题
    js 将一个数组插入到另一个数组的方法
    div随意拖动小例子
    带转义符的json解释
    银行卡四位数空隔
    收录-获取时间、日期
    封装的一些例子
    easyui-validatebox 验证
  • 原文地址:https://www.cnblogs.com/james1207/p/3260506.html
Copyright © 2020-2023  润新知