您的位置:首页 > 编程语言 > Java开发

09月08日学习杂记(Spring第一天)

2006-10-06 21:23 441 查看
Spring学习第一站:
今天,张老师正式带领我们开始SPRING旅了,心理多少有几分喜悦.
大概思路如下:
写一个带个BEAN的XML文件,在这个文件中有我们所需要的BEAN,接着写一个FactoryBean的类,这个类需要实现FactoryBean接口,并实现里面的三个抽像方法,我们的主要实现代理的代码是在getObject方法里实现的,再接下来的任务就是写一个实现InvocationHandler的类,在这里我们为其命名为MyInvocationHandler,这个类里必不可少的当然是要实现这个类的一个抽象方法invoke(),最后,编写一个测试类来检验一下刚才所做的这一切,首先创建通过记取XML文件来创建一个BeanFactory的实例,接着通过这个factory的实例的getBean()方法来得到一个真正的BEAN实例,最后运行,这样,一个从XML文件来加载BEAN的测试程序就写完了,下面是主要代码及注释:

MyFactoryBean类中的getObject()方法:
===================================================================================
public Object getObject() throws Exception {
  
  //定义一个类的数组,用来存储myInterface所在的类
  Class [] clazzes = new Class[]{Class.forName(myInterface)};
  
  //得到target所对应的类用变量CLAZZ来存储
  Class clazz = Class.forName(target);
  Object objTarget = clazz.newInstance();
  
  //利用代理来实例化一个对象,并且返回这个对象
  Object objProxy = Proxy.newProxyInstance(this.getClass().getClassLoader(),clazzes,new MyInvocationHandler(objTarget));
  return objProxy;
  //return null;
 }

 

实现InvocationHandler的类MyInvocationHandler类的全部代码:
====================================================================================
public class MyInvocationHandler implements InvocationHandler {

 private Object objTarget = null;
 public MyInvocationHandler(Object objTarget) {
  super();
  // TODO Auto-generated constructor stub
  this.objTarget = objTarget;
 }

 public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
  // TODO Auto-generated method stubs
  LogFactory.getLog(this.getClass()).info(method.getName() + " is calling!");
  Object objValue = method.invoke(objTarget,args);
  return objValue;
  
 }
}

 

装有BEAN的XML文件(applicationContext.xml)的全部代码
=====================================================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <bean id="myfactorybean" class="cn.itcast.MyFactoryBean">
  <property name="target">
   <value>java.util.Vector</value>
  </property>
  <property name="myInterface">
   <value>java.util.Collection</value>
  </property>
 </bean>

</beans>

在主函数中验正所有信息(MainClass.java)
========================================================================================
public static void main(String[] args) {
  // TODO Auto-generated method stub
  //产生一个新的XmlBeanFactory,它是通过applicationContext.xml文件得到的
  BeanFactory factory = new XmlBeanFactory(new ClassPathResource("/applicationContext.xml"));
  
  //从BEAN工厂中得到一个实体的BEAN
  Object obj = factory.getBean("myfactorybean");
  
  //初始化LOG4J并打印LOG信息
  BasicConfigurator.configure();
  ((Collection)obj).add(new String("abc"));
  Log log = LogFactory.getLog("MainClass.class");
    log.info(obj.getClass().getName());
  
  
 }

GETBEAN执行机制:
传入一个BEAN的ID,然后根据这个ID在XML文件中查找相应的类,用这个类实例化一个对象,并把XML的属性为这个对象装配,再判断这个对像是不是那个BeanFactory的一个实例,如果不是,则直接返回这个BEAN对象,如果是则调用这个对象的getObject方法,并返回创建出的对象 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息