콩과 스프링 용기의 관계
Bean 구성 정보는 Bean의 구현 및 종속성을 정의합니다. 스프링 컨테이너는 다양한 형태의 Bean 구성 정보를 기반으로 컨테이너 내에 Bean 정의 레지스트리를 설정 한 다음 레지스트리에 따라 콩을로드하고 인스턴스화하고 콩과 콩 사이의 종속성을 설정합니다. 마지막으로,이 준비된 콩은 외부 애플리케이션을 호출 할 수 있도록 Bean 캐시 풀에 배치됩니다.
이 기사에서는 인코딩 방법을 사용하여 봄에 콩을 동적으로 구성하는 것에 대해 자세히 소개합니다. 우리는 당신의 참조와 학습을 위해 그것들을 공유 할 것입니다. 아래에서 많이 말하지 않겠습니다. 자세한 소개를 함께 살펴 보겠습니다.
1 DefaultListableBeanFactory
DefaultListableBeanFactory는이 클래스를 통해 Bean을 동적으로 주입 할 수있는 configurablelistableBeanFactory 인터페이스를 구현합니다. AOP에 의해 주입 된 콩을 향상시킬 수 있으려면 Bean의 Factory PostProcessor 인터페이스 BeanFactoryProcessor를 구현해야합니다.
동적 주입이 필요한 콩 :
공개 클래스 Bookservice {Bookdao Bookdao; 공개 void setbookdao (Bookdao Bookdao) {this.bookdao = bookdao; } public bookdao getBookDao () {return bookdao; }}Bean의 공장 포스트 프로세서 인터페이스 구현 :
@ComponentPublic Class BookServiceFactoryBean은 BeanFactoryPostProcessor를 구현합니다. {public void postProcessBeanfactory (configurablistablebeanFactory beanfactory)는 beansexception {defaultListableBeanFactory factory = (defaultListableBeanCactory) beanfactory; // Bean 정의 BeanDefinitionBuilder Builder = BeanDefinitionBuilder.genericBeanDefinition (BookService.class); // 속성 builder.adpropertyreference ( "bookdao", "bookdao")를 설정합니다. // Register Bean 정의 팩토리 팩토리 .registerBeanDefinition ( "BookService1", builder.getRawbeanDefinition ()); // Register bean instance factory.registersingleton ( "bookservice2", new net.deniro.spring4.dynamic.bookservice ()); }}여기서 Bookdao가 컨테이너에 주입되었다고 가정합니다 (XML 또는 주석 방법).
여기서는 콩의 정의를 등록하거나 콩의 인스턴스를 직접 등록 할 수 있습니다.
구성:
<context : component-scan base-package = "net.deniro.spring4.dynamic" />
단위 테스트 :
BookService bookservice1 = (BookService) context.getBean ( "BookService1"); AsserTnotnull (BookService1); AsserTnotnull (bookservice1.getBookDao ()); BookService BookService2 = (BookService) conte.getBean ( "BookService2");
2 개의 맞춤형 태그
구성 요소를 더 잘 캡슐화하고 사용 편의성을 향상시키기 위해 구성 요소를 라벨로 정의합니다.
태그를 사용자 정의하는 단계는 다음과 같습니다.
스키마 폴더에서 리소스의 bookservice.xsd를 만듭니다
<? xml version = "1.0"encoding = "utf-8"?> <xsd : schema xmlns = "http://www.deniro.net/schema/service"xmlns : xsd = "http://www.w.3.org/2001/xmlschema" xmlns : beans = "http://www.springframework.org/schema/beans"targetnamespace = "http://www.deniro.net/schema/service"ElementformDefault = "Qualified"attribute "attribute"> <<xsd :> 네임 스페이스 = "http://www.springframework.org/schema/beans"/> <!-책 서비스 태그 정의-> <xsd : element name = "book-service"> <xsd : complextension> <xsd : extension base = "<!-정의-정의-정의-정의. <xsd : 속성 이름 = "dao"type = "xsd : 문자열"use = "require"/</xsd : extension> </xsd : complexContent> </xsd : complextype> </xsd : element> </xsd : schema>
그런 다음 서비스 태그 파서를 정의합니다.
공개 클래스 BookserVicedEfinitionParser는 BeanDefinitionParser를 구현합니다. {public beandefinition parse (요소 요소, parserconText parserContext) {// 생성 Bean DefinitionBeanDefinitionBuilder Builder = BeanDefinitionBuilder.genericbeanDefinition (BookerVice.class); // 사용자 정의 태그 속성을 주입하십시오. String dao = element.getAttribute ( "dao"); builder.adpropertyreference ( "bookdao", dao); // register bean parsercontext.registerbeancomponent 정의 널 리턴; }}그런 다음 네임 스페이스에 방금 정의한 파서를 등록하십시오.
Public Class BookservicenamespaceHandler는 NamespaceHandlersUpport 확장 {public void init () {registerBeanDefinitionParser ( "Book-Service", New BookserVicedEfinitionParser ()); }}그런 다음 리소스에서 메타 인프 폴더를 작성하고 Spring.Schemas 및 Spring.Handlers를 작성하십시오. 사용자 정의 태그의 문서 구조 파일 경로 및 사용자 정의 네임 스페이스를 구문 분석하는 구문 프로그램을 구성하는 데 사용됩니다.
파일 경로
Spring.handlers :
http/: //www.deniro.net/schema/service=net.deniro.spring4.dynamic.bookservicenamespacehandler
Spring.schemas :
http/: //www.deniro.net/schema/service.xsd=schema/bookservice.xsd
참고 : XSD 파일은 자원의 자손 디렉토리에 배치해야합니다.
사용자 정의 태그 인용 :
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xmlns : me = "http://www.deniro.net/schema/service"xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/sprone-beans/spronans.xsd http://www.deniro.net/schema/service http://www.deniro.net/schema/service.xsd "> <bean id ="bookdao "/> <me : book-service dao ="Bookdao "/> </boans>
여기서 우리는 머리에 맞춤 태그를 참조하고 그것을 "나"라고 명명 한 다음 그것을 사용할 수 있습니다.
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.