봄-다례 대상prototype-생명주기 방법 문제
@Lazy(true)//구성 지연 로드 @Scope("prototype")//기본값은singleton
@Lazy(true)와 @Scope("prototype")가 동시에 나타날 때, 이 쓰기 무효 지연 로드는 단일 역할 영역 대상에만 적용됩니다
//ElementType.TYPE , ElementType.METHOD ElementType.CONSTRUCTOR //ElementType.PARAMETER , ElementType.FIELD
//@Retention(RetentionPolicy.RUNTIME) ,
//@Documented , javadoc
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Lazy {
/**
* Whether lazy initialization should occur.
*/
boolean value() default true;
}
/spring-ioc-v5/src/main/java/utils/OpenDataSource.java
package utils;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/**
* @Component bean
*
*/
@Component
@Scope("prototype")// singleton
public class OpenDataSource {//key ,
/**
* @PostConstruct
* jdk1.7
*/
@PostConstruct
public void init(){
System.out.println("OpenDataSource.init()");
}
/**
* @PreDestroy
* jdk1.7
*/
@PreDestroy
public void close(){
System.out.println("OpenDataSource.close()");
}
}
/spring-ioc-v5/src/main/java/config/AppRootConfig.java
package config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* spring-configs.xml
* @Configuration
* @ComponentScan
*/
@Configuration
@ComponentScan("utils") // spring
public class AppRootConfig {
}
package test;
import org.junit.After;
import org.junit.Before;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import config.AppRootConfig;
public class TestBase {
protected AnnotationConfigApplicationContext ctx;
@Before
public void init(){
ctx = new AnnotationConfigApplicationContext(AppRootConfig.class);
}
@After
public void close(){
ctx.close();
}
}
package test;
import org.junit.Test;
import utils.OpenDataSource;
public class TestOpenDataSource01 extends TestBase{
@Test
public void testOpenDataSource(){
// bean
OpenDataSource ds1 = ctx.getBean("openDataSource",OpenDataSource.class);
OpenDataSource ds2 = ctx.getBean("openDataSource",OpenDataSource.class);
// bean
System.out.println(ds1==ds2);
}
}
pom.xml
4.0.0
com.gq
spring-ioc-v5
0.0.1-SNAPSHOT
org.springframework
spring-context
4.3.9.RELEASE
junit
junit
4.12
org.apache.maven.plugins
maven-compiler-plugin
3.5.1
1.8
1.8
UTF-8
실행 결과
클래스가 여러 번 설정되어 있기 때문에 close () 방법을 사용하지 않은 것을 볼 수 있습니다.
06, 2018 3:54:25 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@368239c8: startup date [Thu Sep 06 15:54:25 CST 2018]; root of context hierarchy
OpenDataSource.init()
OpenDataSource.init()
false
06, 2018 3:54:26 org.springframework.context.annotation.AnnotationConfigApplicationContext doClose
: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@368239c8: startup date [Thu Sep 06 15:54:25 CST 2018]; root of context hierarchy
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.