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

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方法,并返回创建出的对象 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值