vin*_*han 6 spring design-patterns prototype-pattern
Spring将bean范围提供为"Prototype".意味着只要应用程序中需要bean,Spring容器就会创建一个新的/新的bean实例.是否遵循原型设计模式?它是否只创建一次对象并在后续请求中调用创建的对象上的clone()方法来创建新对象?
此外,如果有人可以在JDK,Spring,Hibernate或任何J2EE框架中提供原型示例.
Spring不使用原型模式,它使用反射。另外,为了使用clone(),它必须以某种方式子类化一个bean,因为clone()是受保护的,所以它也不使用clone()。
这是来自的代码片段
org.springframework.beans.factory.support.SimpleInstantiationStrategy
Run Code Online (Sandbox Code Playgroud)
这里可以看到java.lang.reflect.Constructor和java.lang.Class反射方法的使用:
public Object instantiate(RootBeanDefinition beanDefinition, String beanName, BeanFactory owner) {
if (beanDefinition.getMethodOverrides().isEmpty()) {
Constructor<?> constructorToUse;
synchronized (beanDefinition.constructorArgumentLock) {
constructorToUse = (Constructor<?>) beanDefinition.resolvedConstructorOrFactoryMethod;
...
constructorToUse = clazz.getDeclaredConstructor((Class[]) null);
...
}
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
因此,术语“原型”用于表明每次调用 getBean 时,您都会获得一个具有相同属性的新实例。然而,这不仅仅是对构造函数的简单调用,因为您将获得一个带有所有依赖项并设置了其他属性的 bean,因此从某种意义上来说,它是一个原型。或者至少它非常符合这个概念。
| 归档时间: |
|
| 查看次数: |
2006 次 |
| 最近记录: |