zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    poj 3068 Bridge Across Islands
    XidianOJ 1086 Flappy v8
    XidianOJ 1036 分配宝藏
    XidianOJ 1090 爬树的V8
    XidianOJ 1088 AK后的V8
    XidianOJ 1062 Black King Bar
    XidianOJ 1091 看Dota视频的V8
    XidianOJ 1098 突击数论前的xry111
    XidianOJ 1019 自然数的秘密
    XidianOJ 1109 Too Naive
  • 原文地址:https://www.cnblogs.com/james1207/p/3260506.html
Copyright © 2011-2022 走看看