您的位置:首页 > 职场人生

黑马程序员_Java高薪技术1

2014-08-18 10:43 176 查看
----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

黑马程序员_Java高新技术之实现类似spring的可配置的AOP框架

1.工厂类BeanFactory负责创建目标类或代理类的实例对象,并通过配置文件实现切换。其getBean方法

是根据参数字符串返回一个相应的实例对象,如果参数字符串在配置文件中对应的类名不是ProxyFactory

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

2.BeanFactory的构造方法接收代表配置文件的输入流对象,配置文件格式如下:

#xxx=java.util.ArrayList

xxx=cn.itcast.ProxyFactoryBean

xxx.target=java.util.ArrayList

xxx.advice=cn.itcast.MyAcvice

现在分为两个步骤:

第一:写出BeanFantory。(其中ProxyFactoryBean也是一个特殊的JavaBean)

第二:写出ProxyFactoryBean。

首先在cn.itcast.javaehance3day2中建立一个package :aopframwork;

然后在cn.itcast.day3中建立一个package:cn.itcast.day3.aopframework;

在包cn.itcast.day3.aopframework中创建一个类:

叫做:BeanFactory

叫工厂,它专门负责创建JavaBean对象,

<span style="font-size:14px;">package cn.itcast.day3.aopframework;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import cn.itcast.day3.Advice;

public class BeanFactory {
Properties props = new Properties();        //这个地方想要得到Properties对象,这个时候也必须要导入包。
public BeanFactory(InputStream ips){         //这个时候的构造方法要接收一个配置文件。这个时候的配置文件必须要导入包。
try {				     //import java.io.InputStream;
props.load(ips);//这个时候会出现异常,最好采用第二种捕捉的方法。而不是采用抛出的方法。
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();//这个地方视频中提到了,关于商业性的项目,如果是商业性的项目必须要进行异常的检查。
}			 //而且做商业性的项目可能是85%是在处理意外。
}

public Object getBean(String name){                  //这个时候的方法是对外的。接收一个String类型的参数。
String className = props.getProperty(name);/*根据xxx=cn.itcast.ProxyFactoryBean拿到名字,类名。
Object bean = null;
try {
Class clazz = Class.forName(className);
bean = clazz.newInstance();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(bean instanceof ProxyFactoryBean){
Object proxy = null;
ProxyFactoryBean proxyFactoryBean = (ProxyFactoryBean)bean;
try {
Advice advice = (Advice)Class.forName(props.getProperty(name + ".advice")).newInstance();
Object target = Class.forName(props.getProperty(name + ".target")).newInstance();
proxyFactoryBean.setAdvice(advice);
proxyFactoryBean.setTarget(target);
proxy = proxyFactoryBean.getProxy();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return proxy;
}
return bean;
}
}
</span>


透彻分析反射的基础_Class类。

反射不是JDK的新特性。

class一般是我们定义一个类的时候用到的关键字

但是这个地方,有一个Class的类。它代表的一个新的事物。

Java程序中的各个Java类,它们是否属于同一类事物,是不是可以用一个类来

描述这个类的事物呢?这个类的名字就叫Class。

类名.class, 例如,System . class

对象.getClass(),例如,new Date() .getClass

Class.forName("类名"),例如,Class.forName("java.util.Date");

有可能的是在写源程序的时候还不知道类的名字。

有八个基本的数据类型。

这个类型也就是分别对应了八个基本的Class的基本类型。

还有一个关于Void的,也有对应的Class返回类型。

比如:Class clsl=void.class;

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息