Spring之替换Bean的返回结果,替换Bean的方法实例 (一)

2014-11-24 09:49:20 · 作者: · 浏览: 0

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


代码如下:
MainMethod.java

[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();

}

}

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

[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;

}



}

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


[java]

public class Student {

private String name;




public String getName() {

return name;

}




public void setName(String name) {

this.name = name;

}



}

public class Student {

private String name;


public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}

}

StudentBiz.java


[java]

public interface StudentBiz {

public Student getStudent();

public void printMsg();

}

public interface StudentBiz {

public Student getStudent();

public void printMsg();

}

StudentBizImpl.java


[java]

public class StudentBizImpl implements StudentBiz {




@Override

public Student getStudent() {

return null;

}




@Override

public void printMsg() {

System.out.println("hello world!!");

}




}

public class StudentBizImpl implements StudentBiz {


@Override

public Student getStudent() {

return null;

}


@Override

public void printMsg() {

System.out.println("hello world!!");

}


}

applicationContext.xml


[html]

< xml version="1.0" encoding="UTF-8" >


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/bea