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方法,并返回创建出的对象
今天,张老师正式带领我们开始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方法,并返回创建出的对象
相关文章推荐
- Spring 学习第一天
- SpringAOP学习第一天 @Pointcut注解
- spring学习第一天--AOP
- Spring学习第一天---Spring是什么
- Spring学习第一天: Hello World
- Spring学习杂记
- 【Java EE 学习 49 上】【Spring学习第一天】【基本配置】
- Spring学习第一天
- 09月15日学习杂记(SPRING散记)
- Spring 学习第一天
- Struts Spring Hibernate学习杂记
- Spring第一天の代码学习(Spring底层依赖注入和控制反转的小例子)
- 学习Spring Boot第一天之Spring注解式声明和注入Bean
- Spring学习第一天
- Spring 学习笔记——第一天
- 【Java EE 学习 49 下】【Spring学习第一天】【MVC】【注解回顾】
- 学习Python第一天 杂记一
- Spring第一天学习总结
- Spring学习第一天(下)
- Spring学习杂记(AOP)