很笨的spring问题啊。。。。。。哎

Kyle-soft 2010-02-07 05:41:57
为什么我在.java文件里面这样写

BeanFactory factory = new XmlBeanFactory(new FileSystemResource(path));
// 如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化
factory.getBean("startQuertz");

只要用了
factory.getBean("startQuertz");语句
就自动执行了一个方法。他是怎么知道我要实例化这个类,是为了调用哪个方法啊?

而且
factory.getBean("startQuertz");这个对象我想知道是什么有办法知道吗?
比如我用别人的配置文件我怎么知道factory.getBean("startQuertz");这个对象具体是那个对象啊?
麻烦大家了我知道我问题很笨啊。5555555555但是我也不知道那里去找啊!55




<?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="quartzJob" class="test.QuartzJob"></bean>
<!-- 定义调用对象和调用对象的方法 -->
<bean id="jobtask"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="quartzJob" />
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>work</value>
</property>
</bean>
<!-- 定义触发时间 -->
<bean id="doTime"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobtask" />
</property>
<!-- cron表达式 -->
<property name="cronExpression">
<value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>
</property>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="doTime" />
</list>
</property>
</bean>


<bean id="quartzString" class="java.lang.String">
<constructor-arg value="Rick"/>

</bean>

</beans>
...全文
154 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lkj107 2010-02-09
  • 打赏
  • 举报
回复
这个是注入关系的配置文件提供 的
猿敲月下码 2010-02-09
  • 打赏
  • 举报
回复
是的,spring里面运用了大量的反射
SambaGao 2010-02-09
  • 打赏
  • 举报
回复
不错,看看源码吧。

像这样。应该是用factory.getBean("startQuertz"); 反射的。
java1109 2010-02-09
  • 打赏
  • 举报
回复
比如我用别人的配置文件我怎么知道factory.getBean("startQuertz");这个对象具体是那个对象啊?

你要到别人的配置文件中找到startQuertz这个id
guodong66 2010-02-09
  • 打赏
  • 举报
回复
好多代码。晕了,等结果。
yueguangkai001 2010-02-09
  • 打赏
  • 举报
回复
你用别人的东西,别人不告诉你怎么用你当然就没办法用了,还是需要别人提供
  • 打赏
  • 举报
回复
别人的properties?别人的能用,也能告诉你。。
老张-AI 2010-02-07
  • 打赏
  • 举报
回复
想多了解的话,可以直接看spring的源代码。
小贝壳666 2010-02-07
  • 打赏
  • 举报
回复
factory.getBean("startQuertz");这个对象我想知道是什么有办法知道吗?
只能看配置文件:
<bean id="startQuertz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

这样就知道factory.getBean("startQuertz");得到的是SchedulerFactoryBean实例对象。
必须看配置文件的,再说,配置文件也是开发的程序员配的。
小贝壳666 2010-02-07
  • 打赏
  • 举报
回复
factory.getBean("startQuertz");中的"startQuertz"再根据配置文件
<bean id="startQuertz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
能得到SchedulerFactoryBean个类。
SchedulerFactoryBean bean = Class.forName("SchedulerFactoryBean").newInstance();
Class.forName方法是JAVA的反射包里提供的一个方法,可以直接反回一个对象的实例。上记那样写就返回了SchedulerFactoryBean实例。
这样,只要你写factory.getBean("startQuertz");就会得到SchedulerFactoryBean实例
py330316117 2010-02-07
  • 打赏
  • 举报
回复
反射很复-杂。。。。
lryxxh 2010-02-07
  • 打赏
  • 举报
回复
那个代码中的factory.getBean("startQuertz")是去配置文件中找id名为startQuertz的类
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="doTime" />
</list>
</property>
</bean>
就是这个bean,调用的是class属性对应的类org.springframework.scheduling.quartz.SchedulerFactoryBean的构造方法.
临远 2010-02-07
  • 打赏
  • 举报
回复
当然spring比上面的反射复杂多了
要兼顾DI和AOP,看代码的话,可以看到十几层factoryBean包裹在一起,管理维护创建出的instance。
临远 2010-02-07
  • 打赏
  • 举报
回复
spring里很简单哦,直接用反射根据class实例化的。

原理如下:
Object obj = Class.forName("test.QuartzJo").newInstance();

有兴趣可以看看反射哦,写框架的都会接触到。

想多了解的话,可以直接看spring的源代码。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧