黑马程序员(八) 实现Aop功能的封装和配置的小程序

来源:互联网 发布:soho程序员兼职平台 编辑:程序博客网 时间:2024/05/23 00:13

要求:::工厂类BeanFactory 负责创建目标类或者代理类的实例对象,并通过配置文件实现切换,其

方法更具参数字符串返回一个相应的实例对象,如果番薯字符串在配置文件中对应的类名下不是

ProxyFactorybean则直接返回该类的实例对象,否则返回该类实例对象的getProxy方法返回的对象


设计思路:::

1,BeanFactory的构造方法接受达标配置文件的输入流对象。配置文件如下

//xxx=java.util.ArrayList
xxx=day3.ProxyFactoryBean
xxx.target=java.util.ArrayList
xxx.advise=day3.MyAdvice

2,ProxyFactoryBean充当封装生成动态代理的工厂,需要为工厂类提供哪些配置信息呢。?

  目标:

  通知:

3,编写客户端应用

   a,编写实现advice接口的类和配置文件中进行配置

   b,调用BeanFactory获取对象


第一步。。创建BeanFactory

package day3;import java.io.IOException;import java.io.InputStream;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.Properties;public class BeanFactory {private static Properties pro;BeanFactory(InputStream ins)//BeanFactory的输入流构造方法。直接的从调用程序里传入一个配置文件调用它{pro=new Properties();try {pro.load(ins);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public Object getBean(String name)throws Exception//创建getbean方法。。{String vaule=pro.getProperty(name);Class clazz=Class.forName(vaule);Object bean=clazz.newInstance();//创建bean类型的实例对象。if(bean instanceof ProxyFactoryBean)//bean 对象属于proxyFactoryBean创建的对象{ProxyFactoryBean proxy=(ProxyFactoryBean)bean;//强制转换。因为bean对象属于它String adviseName=pro.getProperty(name+".advise");MyAdvice advise=(MyAdvice)Class.forName(adviseName).newInstance();//加载配置文件,创建一个配置文件对象String targetName=pro.getProperty(name+".target");Object target=Class.forName(targetName).newInstance();proxy.setAdvise(advise);//设置proxybean对象的的字段值proxy.setTarget(target);return proxy.getProxy();//调用getProxy方法。返回proxy对象}return bean;}}
因为如果是ProxyFactorybean的话该类实例对象的getProxy方法返回的对象。。这里就要引用到动态代理返回的对象。

调用模板。。创建ProxyFactorybean类。同时设置好两个字段属性值。。这也是一个bean类。按照bean类去设置就可以了

package day3;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class ProxyFactoryBean {private MyAdvice advise;
package day3;import java.io.InputStream;public class AopFramworkTest {/** * @param args */public static void main(String[] args) throws Exception{// TODO Auto-generated method stubInputStream ins=AopFramworkTest.class.getResourceAsStream("config.properties");System.out.println(new BeanFactory(ins).getBean("xxx").getClass().getName());}}

创建主程序加载配置信息。调用方法返回实例对象


package day3;import java.io.InputStream;public class AopFramworkTest {/** * @param args */public static void main(String[] args) throws Exception{// TODO Auto-generated method stubInputStream ins=AopFramworkTest.class.getResourceAsStream("config.properties");System.out.println(new BeanFactory(ins).getBean("xxx").getClass().getName());}}


0 0