[英]Understanding basic Spring Framework and Total Flow
我是Spring框架的新手。 请指导我有关Spring的基本知识。 我知道Java和JSF,但对Struts或其他框架一无所知。 我已经搜索了Internet并能够下载PDF,但是我不了解Spring流程,就像我了解JSF流程一样。 请为我提供链接,以一种简单的方式了解Spring的流程。
我也是Spring Framework的新手。 到目前为止,以下文档是最基本的文档。 我也在阅读,希望它能对您有所帮助。
我也是Spring的新手,以前有类似的问题。 首先,我想向您推荐Craig Walls撰写的“ Spring in Action”一书,我发现它非常有用且易于理解,并且http://www.tutorialspoint.com/spring/帮助我弄清楚了很多事情。 如果我正确理解了您的问题,那么我们可以将“ Spring的流程”划分为Spring IoC容器和Spring Bean的生命周期。 这是关于Spring bean生命周期的一个非常小的概述。 在Spring容器中,bean在创建和销毁之间经历了几个步骤。 这些步骤是:
每个步骤都提供了自己的定制机会。 以下是一些简单地“跟踪” bean生命的代码:
对于豆类A:
public class ClassA implements InitializingBean, DisposableBean, BeanNameAware, BeanFactoryAware, ApplicationContextAware{
private String messageA;
public ClassA() {
System.out.println("ClassA: default constructor called.");
}
public void customInitMethod(){
System.out.println("ClassA: customInitMethod() method called.");
}
public void customDestroyMethod(){
System.out.println("ClassA: customDestroyMethod() method called.");
}
public String getMessageA() {
System.out.println("ClassA: message get method called.");
return messageA;
}
public void setMessageA(String message) {
System.out.println("ClassA: message set method called.");
this.messageA = message;
}
public void afterPropertiesSet() throws Exception {
System.out.println("ClassA: afterPropertiesSet() called because InitializingBean interface.");
}
public void destroy() throws Exception {
System.out.println("ClassA: destroy() called because DisposableBean interface.");
}
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
System.out.println("ClassA: application context set: " + arg0.getApplicationName());
}
public void setBeanFactory(BeanFactory arg0) throws BeansException {
System.out.println("ClassA: beanFacrory set.");
}
public void setBeanName(String arg0) {
System.out.println("ClassA: bean name set: " + arg0);
}
}public class ClassA implements InitializingBean, DisposableBean, BeanNameAware, BeanFactoryAware, ApplicationContextAware{
private String messageA;
public ClassA() {
System.out.println("ClassA: default constructor called.");
}
public void customInitMethod(){
System.out.println("ClassA: customInitMethod() method called.");
}
public void customDestroyMethod(){
System.out.println("ClassA: customDestroyMethod() method called.");
}
public String getMessageA() {
System.out.println("ClassA: message get method called.");
return messageA;
}
public void setMessageA(String message) {
System.out.println("ClassA: message set method called.");
this.messageA = message;
}
public void afterPropertiesSet() throws Exception {
System.out.println("ClassA: afterPropertiesSet() called because InitializingBean interface.");
}
public void destroy() throws Exception {
System.out.println("ClassA: destroy() called because DisposableBean interface.");
}
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
System.out.println("ClassA: application context set: " + arg0.getApplicationName());
}
public void setBeanFactory(BeanFactory arg0) throws BeansException {
System.out.println("ClassA: beanFacrory set.");
}
public void setBeanName(String arg0) {
System.out.println("ClassA: bean name set: " + arg0);
}
}
对于CustomPostProcessor:
public class CustomPostProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("CustomPostProcessor: beforeInitialization on: "
+ beanName);
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("CustomPostProcessor: afterInitialization on: "
+ beanName);
return bean;
}
}
在主类中,我们创建ApplicationContext,获取bean并输出消息:
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext(
"META_INF/spring/app-context.xml");
ClassA objA = (ClassA) context.getBean("classA");
System.out.println(objA.getMessageA());
context.registerShutdownHook();
}
在app-context.xml中,我们有:
<bean id="classA" class="ClassA" init-method="customInitMethod"
destroy-method="customDestroyMethod">
<property name="messageA" value="messagA: Hello Spring!" />
</bean>
<bean class="CustomPostProcessor" />
据我了解,输出线以这种方式对应于生命周期阶段:
ClassA:调用默认构造函数。
ClassA:调用消息集方法。
ClassA:bean名称集:classA
ClassA:beanFacrory集。
ClassA:应用程序上下文集:
CustomPostProcessor:beforeInitialization上:classA
ClassA:afterPropertiesSet()被调用,因为有InitializingBean接口。
ClassA:调用customInitMethod()方法。
CustomPostProcessor:afterInitialization于:classA
ClassA:消息的get方法被调用。 messagA:你好,春天!
ClassA:因为DisposableBean接口而调用destroy()。
ClassA:调用customDestroyMethod()方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.