스프링 주입 방법
그러나 Java 프로그램에는 getter 호출 방법, 일반 호출 방법, 액세스 클래스나 대상의 Field 등 다른 유형의 문장이 있을 수 있으며, Spring도 이러한 문장에 대응하는 설정 문법을 제공한다.
getter 호출 방법: PropertyPathFactoryBean 사용
클래스 또는 객체의 Filed 값 호출: FiledRetrievingFactoryBean 사용
일반 방법 호출: MethodInvokingFactoryBean 사용
다른 Bean의 속성 값 주입
Property PathFactory Bean은 목표 Bean의 속성 값(실제로는 getter 방법으로 되돌아오는 값)을 얻는 데 사용되며, 획득한 값은 다른 Bean에 주입할 수도 있고, 새로운 Bean을 직접 정의할 수도 있다.다음 구성 파일을 참조하십시오.
<bean id="person" class="com.abc.Person">
<property name="age" value="30" />
<property name="son">
<!-- Bean -->
<bean class="com.abc.service.Son">
<property name="age" value="11" />
</bean>
</property>
</bean>
<bean id="son2" class="com.abc.service.Son">
<!-- age , person son age son2 age -->
<property name="age">
<!-- PropertyPathFactoryBean -->
<bean id="person.son.age"
class="org.springframework.beans.factory.config.PropertyPathFactoryBean" />
</property>
</bean>
여기서 Person 클래스와 Son 클래스의 속성은 구성 파일에서 볼 수 있습니다. 이것은 더 이상 제공되지 않습니다.주 프로그램은 다음과 같습니다.
public class Test {
public static void main(String args[]) {
ApplicationContext ac =
new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("age=" + ac.getBean("son2", Son.class).getAge());
}
}
출력 결과:age=11
Bean 실례의 속성 값은 다른 Bean을 주입할 수 있을 뿐만 아니라 Bean 실례의 속성 값을 Bean 실례로 직접 정의할 수 있다. 이것도 Property PathFactory Bean을 통해 완성된 것이다.위의 구성 파일에 다음 섹션을 추가합니다.
<bean id="son1"
class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
<!-- Bean, son1 Bean -->
<property name="targetBeanName" value="person" />
<!-- , son1 Bean -->
<property name="propertyPath" value="son" />
</bean>
위의 Test 클래스를 실행하여son2를son1로 바꾸면 결과는 같습니다.다른 Bean의 Field 값 주입
Field Retrieving Factory Bean 클래스를 통해 다른 Bean의 Field 값을 다른 Bean에 주입하거나 새로운 Bean을 직접 정의할 수 있습니다.다음은 구성 세션입니다.
<bean id="son" class="com.abc.service.Son">
<property name="age">
<bean id="java.sql.connection.TRANSACTION_SERIALIZABLE"
class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" />
</property>
</bean>
테스트 메인 프로그램은 위에서 정의한 것과 유사합니다. 여기서 더 이상 제공하지 않습니다. 실행 결과는 다음과 같습니다.age=8
이 설정에서son 대상의age 값은 자바와 같습니다.sql.Connection.TRANSACTION_SERIALIZABLE의 값입니다.위의 정의에서 Field Retrieving Factory Bean 공장 Bean을 정의할 때 지정한 id는 이 Bean 실례의 유일한 표지가 아니라 Field의 표현식(곧 꺼내질 값)을 지정합니다.
주의: Field는 정적일 수도 있고 비정적일 수도 있습니다.위의 설정 세션에서 지정한 필드 표현식은 정적 필드 값이기 때문에 클래스 이름을 통해 직접 접근할 수 있습니다.Field 값이 비정상적이라면 용기에 이미 존재하는 Bean을 통해 접근해야 한다. 즉, Field 표현식의 첫 번째 단어는 용기에 이미 존재하는 Bean이다.
Field 값도 구성 파일에 다음 섹션을 추가하는 등의 Bean 인스턴스로 정의할 수 있습니다.
<bean id="age"
class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<!-- targetClass Field -->
<property name="targetClass" value="java.sql.Connection" />
<!-- targetField Field -->
<property name="targetField" value="TRANSACTION_SERIALIZABLE" />
</bean>
주 프로그램에서 다음 출력을 추가합니다.System.out.println("age="+ ac.getBean("age"));
실행 결과는 위의 문장과 같다.
FieldRetrievingFactoryBean을 사용하여 Field 값을 가져오려면 다음 두 가지 속성을 지정해야 합니다.
targetClass 또는 targetObject: 각각 Field 값이 있는 목표 피로 또는 대상 대상을 지정합니다.만약 획득해야 하는 Field가 정적이면 targetClass로 목표를 지정합니다.필드가 고정적이지 않으면 targetObject를 사용하여 대상 객체를 지정합니다.
targetField: 대상 클래스 또는 대상 객체의 Field 이름을 지정합니다.
Field가 정적 Field인 경우 보다 간결한 쓰기 방법이 있습니다.
<bean id="age"
class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<!-- value -->
<property name="staticField" value="java.sql.Connection.TRANSACTION_SERIALIZABLE" />
</bean>
다른 Bean 주입 방법 반환값Method Invoking Factory Bean 공장 Bean을 통해 목표 방법의 반환 값을 Bean의 속성 값으로 주입할 수 있습니다.이 공장 Bean은 지정한 방법의 반환값을 가져오는데 이 방법은 정적 방법일 수도 있고 실례적인 방법일 수도 있다.이 값은 지정된 Bean 인스턴스의 지정된 속성에 주입될 수도 있고 직접 Bean 인스턴스로 정의할 수도 있습니다.예:
<bean id="valueGenerator" class="com.abc.util.ValueGenerator" />
<bean id="son1" class="com.abc.service.Son">
<property name="age">
<!-- : valueGenerator getValue -->
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref="valueGenerator" />
<property name="targetMethod" value="getValue" />
</bean>
</property>
</bean>
다음은 ValueGenerator:
public class ValueGenerator {
public int getValue() { return 2; }
public static int getStaticValue () { return 3;}
}
테스트 프로그램은 여전히 son1에서 age의 값을 출력합니다. 코드 약관은 다음과 같습니다.age=2
정적 메서드를 호출하려면 구성을 다음과 같이 수정합니다.
<bean id="son1" class="com.abc.service.Son">
<property name="age">
<!-- : valueGenerator getStaticValue -->
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="com.abc.util.ValueGenerator" />
<property name="targetMethod" value="getStaticValue" />
</bean>
</property>
</bean>
테스트 결과:age=3
Java는 재부팅을 지원하기 때문에 정방법 이름만 주고 어떤 방법을 호출할지 확정할 수 없습니다. 위의 설정을 통해 호출에 성공할 수 있는 것은 ValueGenerator의 두 가지 방법이 모두 매개 변수가 없기 때문입니다.만약 방법에 매개 변수가 있다면, 어떻게 설정해야 합니까?구성 파일에 다음을 추가합니다.
<bean id="sysProps"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="java.lang.System" />
<property name="targetMethod" value="getProperties" />
<bean>
<bean id="javaVersion" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<!-- sysProps Bean -->
<property name="targetObject" value="sysProps" />
<property name="targetMethod" value="getProperty" />
<!-- -->
<property name="arguments">
<!-- list -->
<list>
<value>java.version</value>
</list>
</property>
<bean>
상례에서'java'를 사용하는 것과 맞먹는다.version은 매개 변수로java를 호출했습니다.lang. System의 getProperty 방법입니다. 되돌아오는 값은javaVersion이라는 Bean을 만듭니다.즉, 다음과 같습니다.javaVersion = java.lang.System.getProperty("java.version");
앞의 Field와 마찬가지로 정적 방법으로 호출할 경우 더욱 간결한 방법도 있습니다.
<bean id="myBean"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<!-- staticMethod , -->
<property name="staticMethod" value="com.abc.util.ValueGenerator.getStaticValue" />
</bean>
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.