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>

  • 相关阅读:
    国家标准比例尺地形图说明(摘要自SuperMap Objects Document)
    常用日期函数
    CMD执行BCP命令
    如何利用.snk文件生成DLL文件中的Publickeytoken
    SQL SERVER数据库的表中修改字段属性被阻止“Prevent saving changes that require table recreation”
    如何生成DLL文件
    如何反编译DLL文件
    Visual Studio 2022激活密钥
    sqlserver跨数据库查询
    jQuery对象与DOM对象之间的转换
  • 原文地址:https://www.cnblogs.com/james1207/p/3260506.html
Copyright © 2011-2022 走看看