7.17 주 총화
디 렉 터 리:
Spring 의 전체 프레임 워 크 는 '개폐 원칙', 즉 '확장 개방, 수정 폐쇄' 를 엄 격 히 따른다.개인 적 으로 Spring 프레임 워 크 의 핵심 중 하 나 는 IOC, 즉 'Bean Container' 이다. 전체 'Bean Container' 의 생명 주 기 는 크게 로드 (XML 또는 Anotation), 초기 화 (해당 Bean 초기 화), runtime (runtime 에서 Bean 제공), 소각 이다. 즉, 어떤 상황 에서 도 Spring 은 이 절차 에 따라 내 려 온 것 이다.해당 하 는 클래스, 인터페이스, 방법 을 제공 하지 않 고 이 과정 을 바 꾸 려 면 가장 많은 인 터 페 이 스 를 제공 하여 이 과정 을 풍부 화 시 켜 야 한다. 즉, '확장 개발' 이다.이 인 터 페 이 스 는 다음 을 포함한다.
public interface BeanFactoryPostProcessor {
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}
인터페이스 정의 에서 알 수 있 듯 이 그것 은 단지 한 가지 방법 밖 에 없다.
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
매개 변수 유형 은
ConfigurableListableBeanFactory
이 고 근원 을 추적 하 며 이 인터페이스의 정 의 는 다음 과 같다.public interface ConfigurableListableBeanFactory extends ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory {
void ignoreDependencyType(Class> type);
void ignoreDependencyInterface(Class> ifc);
void registerResolvableDependency(Class> dependencyType, Object autowiredValue);
boolean isAutowireCandidate(String beanName, DependencyDescriptor descriptor)throws NoSuchBeanDefinitionException;
BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;
Iterator getBeanNamesIterator();
void clearMetadataCache();
void freezeConfiguration();
boolean isConfigurationFrozen();
void preInstantiateSingletons() throws BeansException;
}
그 중 에 한 가지 방법 이 있어 요.
BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;
해당 Bean Name 을 입력 하면 해당 Bean Definition 을 받 을 수 있 습 니 다. 이 는 Bean 의 메타 정보 설명 에 대응 합 니 다.BeanDefinition 에 대한 인터페이스 설명:
public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {
String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;
String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;
int ROLE_APPLICATION = 0;
int ROLE_SUPPORT = 1;
int ROLE_INFRASTRUCTURE = 2;
String getParentName();
void setParentName(String parentName);
String getBeanClassName();
void setBeanClassName(String beanClassName);
String getFactoryBeanName();
void setFactoryBeanName(String factoryBeanName);
String getFactoryMethodName();
void setFactoryMethodName(String factoryMethodName);
String getScope();
void setScope(String scope);
boolean isLazyInit();
void setLazyInit(boolean lazyInit);
String[] getDependsOn();
void setDependsOn(String... dependsOn);
boolean isAutowireCandidate();
void setAutowireCandidate(boolean autowireCandidate);
boolean isPrimary();
void setPrimary(boolean primary);
ConstructorArgumentValues getConstructorArgumentValues();
MutablePropertyValues getPropertyValues();
boolean isSingleton();
boolean isPrototype();
boolean isAbstract();
int getRole();
String getDescription();
String getResourceDescription();
BeanDefinition getOriginatingBeanDefinition();
}
그 중 에 몇 가지 비교적 자주 사용 하 는 방법 이 있다.
void setFactoryBeanName(String factoryBeanName);
void setBeanClassName(String beanClassName);
void setScope(String scope);
void setLazyInit(boolean lazyInit);
그리고 그 에 상응하는 Get 방법 도 있 습 니 다.즉, runtime 에서 상기 인 터 페 이 스 를 통 해 Bean 의 메타 설명 정 보 를 동적 으로 수정 할 수 있 습 니 다: name, isLazy Init, scope
그래서 우 리 는 최초 로 탐색 한 곳 으로 돌아 가 인터페이스 확장
BeanFactoryPostProcessor
: 이 인 터 페 이 스 를 실현 하 는 postProcessBeanFactory
을 통 해 필요 에 따라 Spring 이 시 작 될 때 해당 Bean 의 메타 설명 정 보 를 동적 으로 수정 합 니 다.이 인터페이스의 상세 한 설명 은 다음 과 같다.
public interface BeanFactoryAware extends Aware {
void setBeanFactory(BeanFactory beanFactory) throws BeansException;
}
방법 은 딱 하나 야.
void setBeanFactory(BeanFactory beanFactory) throws BeansException;
이 인 터 페 이 스 를 실행 할 수 있 습 니 다. runtime 에서 이 BeanFactory 를 얻 을 수 있 습 니 다.
빈 에 대한 확장
이 인터페이스의 정 의 는 다음 과 같다.
public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor {
Object postProcessBeforeInstantiation(Class> beanClass, String beanName) throws BeansException;
boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException;
PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException;
}
그 중 에는 세 가지 방법 이 포함 되 어 있다.
Object postProcessBeforeInstantiation(Class> beanClass, String beanName) throws BeansException;
boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException;
PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException;
이 세 가지 방법의 작용 시 기 는 빈 의 실례 화 단계 이다.그 전에 저도 '실례 화' 와 '초기 화' 의 차 이 를 잘 몰 랐 습 니 다. 나중에 자 료 를 찾 아 보 니 대체적으로 이 렇 습 니 다. 실례 화 - 실례 화 과정 은 Bean 을 만 드 는 과정 입 니 다. 즉, Bean 의 구조 함 수 를 호출 하고 단일 사례 의 Bean 을 단일 사례 풀 에 넣 는 것 입 니 다.초기 화 - 초기 화 과정 은 값 을 부여 하 는 과정 입 니 다. 즉, Bean 의 setter 를 호출 하여 Bean 의 속성 을 설정 합 니 다.
이 인터페이스의 상세 한 설명 은 다음 과 같다.
public interface BeanNameAware extends Aware {
void setBeanName(String name);
}
이 인 터 페 이 스 는 매우 간단 하 다. 단지 한 가지 방법 만 있다.
void setBeanName(String name);
실제 개발 에서 이 인 터 페 이 스 를 구현 하여 "Bean Container" 에 불 러 온 Bean 을 동적 으로 가 져 올 수 있 습 니 다 Name
이 인터페이스의 상세 한 설명 은 다음 과 같다.
public interface BeanPostProcessor {
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}
그 중 에는 두 가지 방법 이 포함 되 어 있다.
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
이 두 가지 방법 은 Bean 초기 화 전후 에 작용 하 는 것 입 니 다. 저 희 는 Bean Name 에 따라 해당 하 는 Bean 을 선별 하고 구체 적 인 업무 수 요 를 결합 하여 일부 Bean 에 대해 맞 춤 형 예비 처 리 를 할 수 있 습 니 다.
그 인터페이스의 상세 한 설명 은 다음 과 같다.
public interface InitializingBean {
void afterPropertiesSet() throws Exception;
}
이 인 터 페 이 스 는 방법 이 하나 밖 에 없다.
void afterPropertiesSet() throws Exception;
이 인 터 페 이 스 는 한 Bean 의 모든 Properties 초기 화가 완 료 된 후에 작 동 하 는 것 이 분명 하 다.이 방법 은 어떠한 매개 변수 도 없 으 며 구체 적 인 업무 수요 에 따라 정의 처리 할 수 있다.
확장: Spring 이 XML 설정 Bean 에 대한 규범 에서 하나의 속성
init-method
을 제공 하여 이 방법 과 같 습 니 다.이 속성의 구체 적 인 용법 은 대체로 다음 과 같다.
이 인터페이스의 구체 적 인 설명 은 다음 과 같다.
public interface DisposableBean {
void destroy() throws Exception;
}
그 중 에 방법 이 하나 밖 에 없어 요.
void destroy() throws Exception;
이 방법 은 어떤 빈 이 끝 날 때 (빈 컨테이너 가 폐 기 될 때) 작용 한다.
이 인터페이스의 상세 한 설명 은 다음 과 같다.
public interface FactoryBean {
T getObject() throws Exception;
Class> getObjectType();
boolean isSingleton();
}
이 중 세 가지 방법 이 있 습 니 다. 실현 방법
getObject
은 사용자 정의 Bean 을 불 러 올 수 있 습 니 다.Bean 수명 주기 에 해당 하 는 인터페이스 호출:
Spring Bean 의 생명주기
2. 작은 물건
그동안 스프링 시스템
BeanFactory
과 ApplicationContext
에 대해 잘 모 르 고 있 었 는데 이번에 자 료 를 좀 찾 아 봤 더 니 점차 정리 되 었 다.XmlBeanFactory
, XmlWebApplicationContext
, ClassPathXmlApplicationContext
, FileSystemApplicationContext
.응용 프로그램 Context 확장: 응용 프로그램 Context 를 가 져 오 는 몇 가지 방법:
pplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
마지막 으로 servlet 에 의존 하지 않 고 주입 할 필요 가 없 는 방식 을 제공 합 니 다.단, 서버 가 시 작 될 때 Spring 용기 가 초기 화 될 때 다음 과 같은 방법 으로 Spring 용 기 를 가 져 올 수 없 음 을 주의해 야 합 니 다.
참고 문장
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.