스프링 구성 파일에서 구성하기 위해 XML 파일을 사용하여 실제로 Spring이 해당 코드를 실행하도록 요청합니다.
<bean> 요소를 사용하면 실제로 스프링이 무모한 또는 파라미터 함유 생성자가 <posperation> 요소를 사용하여 실제로 Spring이 Setter 메소드를 한 번에 실행하도록하는 것입니다.
그러나 Java 프로그램은 다른 유형의 진술이있을 수 있습니다. Getter 메소드 호출, 일반 방법 호출, 클래스 또는 객체의 필드 액세스 등 Spring도 그러한 진술에 대한 해당 구성 구문을 제공합니다.
Getter Method를 호출하십시오 : PropertyPathFactoryBean을 사용하십시오
클래스 또는 개체의 제출 된 가치 호출 : FiledRievingFactoryBean 사용
정상 방법으로 호출 : methodinVokingFactoryBean을 사용하십시오
다른 콩의 속성 값을 주입하십시오
PropertyPathFactoryBean은 대상 Bean의 속성 값을 얻는 데 사용됩니다 (실제로 Getter 메서드를 호출하여 반환 된 값). 얻은 값은 다른 콩에 주입 될 수 있거나 새 콩을 직접 정의 할 수 있습니다. 다음 구성 파일을 참조하십시오.
<bean id = "person"> <property name = "age"value = "30"/> <property name = "son"> <!-중첩 콩을 사용하여 속성 값을 사용하여 속성 값을 정의합니다-> <bean> <property name = "age"value = "11"/> </bean> </property> </bean> <bean id = "son2"> <! name = "age"> <!-PropertyPathFactoryBean은 여기에서 사용됩니다 .-> <bean id = "person.son.age"/> </property> </bean>
사람과 아들 클래스의 속성은 더 이상 제공되지 않는 구성 파일에서 볼 수 있습니다. 주요 프로그램은 다음과 같습니다.
공개 클래스 테스트 {public static void main (String args []) {ApplicationContext ac = new ClassPathXmlApplicationContext ( "ApplicationContext.xml"); System.out.println ( "age =" + ac.getbean ( "son2", son.class) .getage ()); }} 출력 결과 :
나이 = 11
Bean 인스턴스의 속성 값은 다른 Bean을 주입 할 수있을뿐만 아니라 Bean 인스턴스의 속성 값을 Bean 인스턴스로 직접 정의 할 수 있습니다. 이것은 또한 PropertyPathFactoryBean을 통해 이루어집니다. 이 단락을 위 구성 파일에 추가하십시오.
<bean id = "son1"> <!-대상 Bean을 결정하고, son1의 구성 요소가 어떤 bean에서 나오는지를 나타냅니다-> <property name = "targetBeanname"value = "person" /> <!-속성을 결정하고, son1의 속성을 나타내는 속성을 결정합니다.
위의 테스트 클래스를 실행하고 SON2를 SON1로 바꾸면 결과가 동일합니다.
다른 콩의 필드 값을 주입하십시오
FieldRievevingFactoryBean 클래스를 통해 다른 콩의 전계 값을 다른 콩에 주입하거나 새 콩을 직접 정의 할 수 있습니다. 다음은 구성 클립입니다.
<bean id = "son"> <property name = "age"> <bean id = "java.sql.connection.transaction_serializable"/> </property> </bean>
기본 테스트 프로그램은 위의 정의와 유사하며 더 이상 여기에 제공되지 않으며 실행 결과는 다음과 같습니다.
나이 = 8
이 구성에서 SON 객체의 연령 값은 java.sql.connection.transaction_serializable의 값과 같습니다. 위의 정의에서, FieldRievingFactoryBean Factory Bean을 정의 할 때, 지정된 ID는 Bean 인스턴스의 고유 식별자가 아니라 필드의 표현 (즉, 취할 값)입니다.
참고 : 필드는 정적이거나 정적이 아닌 것일 수 있습니다. 위의 구성 스 니펫으로 지정된 필드 표현식은 정적 필드 값이므로 클래스 이름을 통해 직접 액세스 할 수 있습니다. 필드 값이 정적이 아닌 경우 컨테이너에 이미 존재하는 콩을 통해 액세스해야합니다. 즉, 필드 표현의 첫 번째 문구는 컨테이너에 이미 존재하는 콩이어야합니다.
필드 값은 Bean 인스턴스로 정의 될 수도 있습니다. 예를 들어 다음 단락을 구성 파일에 추가하십시오.
<bean id = "age"> <!-TargetClass 필드가 위치한 대상 클래스를 지정합니다-> <property name = "target class"value = "java.sql.connection" /> <!-TargetField 필드 이름-> <속성 이름 = "targetfield"value = "transactaction_serializable" />>.
메인 프로그램에 다음 출력을 추가하십시오.
System.out.println ( "age =" + ac.getbean ( "age"));
실행 결과는 위와 동일합니다.
필드 값을 얻기 위해 FieldRievingFactoryBean을 사용하는 경우 다음 두 속성을 지정해야합니다.
TargetClass 또는 TargetObject : 필드 값이 위치한 대상 축적 또는 대상 객체를 지정하는 데 사용됩니다. 얻으려는 필드가 정적 인 경우 TargetClass를 사용하여 대상 축적을 지정하십시오. 필드가 정적이 아닌 경우 TargetObject를 사용하여 대상 객체를 지정하십시오.
TargetField : 대상 클래스 또는 대상 개체의 필드 이름을 지정합니다.
필드가 정적 필드 인 경우 더 간결한 방법이 있습니다.
<bean id = "age"> <!-값은 클래스의 정적 도메인 값-> <속성 이름 = "staticfield"value = "java.sql.connection.transaction_serializable" /> < /bean>을 지정합니다.
다른 콩을 주입하는 방법은 값을 반환합니다
MethodinVokingFactoryBean Factory Bean을 통해 대상 방법의 반환 값을 Bean의 속성 값에 주입 할 수 있습니다. 이 공장 Bean은 지정된 방법의 반환 값을 얻는 데 사용됩니다. 이 방법은 정적 방법 또는 인스턴스 방법 일 수 있습니다. 이 값은 지정된 Bean 인스턴스의 지정된 속성에 주입하거나 Bean 인스턴스로 직접 정의 될 수 있습니다. See example:
<bean id = "valueGenerator" /> <bean id = "son1"> <속성 이름 = "age"> <!-메소드 리턴 값 가져 오기 : valueGenerator의 getValue 메소드를 호출합니다.> <ean> <property name = "valueGenerator" /> <property name = "targetmethod"value = "getValue" />>> < /bean>>.
ValueGenerator는 다음과 같습니다.
public class valueGenerator {public int getValue () {return 2; } public static int getStaticValue () {return 3;}} 테스트 프로그램은 여전히 SON1에서 연령의 가치를 인쇄하고 코드는 생략되며 결과는 다음과 같습니다.
나이 = 2
정적 메소드를 호출하려면 구성을 다음과 같이 수정하십시오.
<bean id = "son1"> <property name = "age"> <!-메소드 반환 값 가져 오기 : valueGenerator의 getStaticValue 메소드를 호출합니다 .-> <ean> <속성 이름 = "target class"value = "com.abc.util.valuegenerator"/> <property name = "targetmethod"value = "getstaticValue"/> </bean>> </bean>> </bean>.
테스트 결과는 다음과 같습니다.
나이 = 3
Java는 과부하를 지원하기 때문에 메소드 이름 만 제공해도 호출 할 메소드를 결정하기에 충분하지 않습니다. ValueGenerator의 어느 쪽도 매개 변수가 없기 때문에 위 구성을 성공적으로 호출 할 수 있습니다. 메소드에 매개 변수가있는 경우 구성 방법은 무엇입니까? 구성 파일에 다음 내용을 포함시킵니다.
<bean id = "sysprops"> <property name = "target class"value = "java.lang.system" /> <property name = "targetmethod"value = "getProperties" /> <ean> <bean> <bean id = "javaversion"> <! <! value = "getProperty"/> <!-여기에 매개 변수를 구성합니다-> <속성 이름 = "arguments"> <!-목록 요소를 사용하여 호출 메소드의 여러 매개 변수를 나열합니다-> <slist> <alue> java.version </value> </stuction> <bean>
위의 예에서는 "java.version"을 매개 변수로 java.lang.system의 getProperty 메소드를 호출하는 것과 같습니다. 리턴 값은 Javaversion이라는 콩을 생성합니다. 즉, 다음과 같습니다.
javaversion = java.lang.system.getProperty ( "java.version");
이전 기사의 필드와 마찬가지로, 호출되는 방법이 정적 메소드 인 경우 더 간결한 방법도 있습니다.
<bean id = "mybean"> <!-정적 메드 속성을 사용하여 대상 클래스의 대상 메소드를 직접 지정합니다-> <속성 이름 = "staticMethod"value = "com.abc.util.valuegenerator.getstaticValue" /> < /bean>
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.