Использование файлов XML для настройки в файлах конфигурации пружины фактически просит Spring для выполнения соответствующего кода, например:
Использование элемента <Bean> на самом деле позволяет Spring выполнить неправометированный или содержащий параметр конструктор, используйте элемент <property>, чтобы фактически позволить Spring выполнить метод сеттера один раз
Тем не менее, Java -программы также могут иметь другие типы операторов: вызов методов Getter, вызов обычных методов, доступ к классам или объектам и т. Д. Spring также обеспечивает соответствующий синтаксис конфигурации для таких операторов:
Метод получения вызова: используйте PropertyPathfactoryBean
Вызов прибранного значения класса или объекта: используйте FileDretRievingFactoryBean
Вызов нормального метода: используйте MethodInvokingFactoryBean
Введите значения свойства других бобов
PropertyPathfactoryBean используется для получения значения свойства целевого боба (фактически значение, возвращаемого методом Getter). Полученное значение может быть введено в другие бобы, или новая фасоль может быть непосредственно определен. См. Следующий файл конфигурации:
<bean id = "person"> <name = "age" value = "30"/> <name = "son"> <!-Используйте вложенные бобы для определения значений свойства-> <bean> <name = "age" value = "11"/> </bean> </property> </bean> <bean Id = "Son2"> <! Son2-> <name Property = "age"> <!-Обратите внимание, что здесь используется PropertypathfactoryBean
Свойства классов человека и сына можно увидеть из файла конфигурации, который больше не указан. Основная программа заключается в следующем:
открытый тест класса {public static void main (string args []) {ApplicationContext ac = new classpathxmlapplicationContext ("ApplicationContext.xml"); System.out.println ("age =" + ac.getbean ("son2", son.class) .getage ()); }} Результат вывода:
возраст = 11
Значение свойства экземпляра боба может не только вводить другой бобов, но также напрямую определять значение свойства экземпляра бобов в качестве экземпляра Bean. Это также делается через PropertyPathfactorybean. Добавьте этот абзац в приведенный выше файл конфигурации:
<Bean id = "son1"> <!-Определите целевой фасоль, указывая, какой компонент Son1 исходит от-> <name = "targetbeanname" value = "person" /> <!-определить атрибут, указывая, какое свойство Son1 происходит от-> <property name = "Propertypath" value = "son" /> < /bean>
Выполните тестовый класс выше и замените Son2 на Son1, и результат тот же.
Введите поле поля других бобов
Через класс FieldretRievingFactoryBean вы можете вводить полевые значения других бобов в другие бобы, или вы можете напрямую определить новую фасоль. Вот клип конфигурации:
<bean id = "son"> <name = "age"> <bean id = "java.sql.connection.transaction_serializable"/> </property> </bean>
Основная тестовая программа аналогична вышеуказанному определению и больше не предоставляется здесь, и результаты выполнения следующие:
возраст = 8
В этой конфигурации значение объекта возраста сына равно значению java.sql.connection.transaction_serializable. В приведенном выше определении, определяя фабрику FieldReTrieingFactorybean Factory Bean, указанный идентификатор не является уникальным идентификатором экземпляра бобов, а выражением поля (то есть значением, которое нужно извлечь).
Примечание: поле может быть статичным или нестатическим. Выражение поля, указанное при вышеуказанном фрагменте конфигурации, является статическим значением поля, поэтому к нему можно получить доступ непосредственно через имя класса. Если значение поля нестативно, к нему следует получить доступ через бобы, которые уже существуют в контейнере, то есть первой фразой выражения поля должна быть бобы, которые уже существуют в контейнере.
Значение поля также можно определить как экземпляр боба, например, добавить следующий абзац в файл конфигурации:
<bean id = "age"> <!-TargetClass Указывает целевой класс, где поле находится-> <name = "targetClass" value = "java.sql.connection" /> <!-Targetfield Указывает имя поля-> <Свойство = "Targetfield" value = "transaction_serializable" /> < /bean>
Добавьте следующий вывод в основную программу:
System.out.println ("age =" + ac.getbean ("age"));
Результат выполнения такой же, как и выше.
При использовании FieldretRievingFactoryBean для получения значения поля необходимо указать следующие два свойства:
TargetClass или TargetObject: используется для указания целевого накопления или целевого объекта, где расположено значение поля. Если поле, которое вы хотите получить, является статическим, используйте TargetClass для указания целевого накопления; Если поле нестативно, используйте TargetObject, чтобы указать целевой объект.
Targetfield: указывает имя поля целевого класса или целевого объекта
Если поле является статическим полем, есть более краткий способ написать:
<bean id = "age"> <!-значение указывает, какое статическое значение домена, из которого класс-> <name = "staticfield" value = "java.sql.connection.transaction_serializable" /> < /bean>
Методы, которые вводят другие возвращаемые значения других бобов
Через фабрику Methodinvokingfactorybean Factory Bean обратное значение целевого метода может быть введено в значение свойства бобов. Эта фабрика используется для получения возврата значения указанного метода. Метод может быть либо статическим методом, либо методом экземпляра; Это значение может быть введено в указанный атрибут указанного экземпляра Бин или непосредственно определен как экземпляр боба. Смотрите пример:
<bean id="valueGenerator" /><bean id="son1"> <property name="age"> <!-- Get method return value: call the getValue method of valueGenerator--> <bean > <property name="targetObject" ref="valueGenerator" /> <property name="targetMethod" value="getValue" /> </bean> </property></bean>
Вот ценности генератора:
открытый класс ValueGenerator {public int getValue () {return 2; } public static int getStaticValue () {return 3;}} Программа испытаний по -прежнему печатает ценность возраста в Son1, код опущен, и результат заключается в следующем:
возраст = 2
Если вы хотите вызвать статический метод, измените конфигурацию на:
<bean id="son1"> <property name="age"> <!-- Get method return value: call the getStaticValue method of valueGenerator--> <bean > <property name="targetClass" value="com.abc.util.ValueGenerator" /> <property name="targetMethod" value="getStaticValue" /> </bean> </property></bean>
Результаты теста:
возраст = 3
Поскольку Java поддерживает перегрузку, только указание названия метода недостаточно, чтобы определить, какой метод вызовать. Вышеуказанная конфигурация может быть успешно названа, потому что ни один из методов valuegenerator не имеет параметров. Если в методе есть параметры, как его настроить? Включите следующее содержимое в файл конфигурации:
<bean id = "sysprops"> <name = "targetClass" value = "java.lang.system" /> <name = "targetMethod" value = "getProperties" /> <bean> <bean id = "javaversion"> <!-указывать на вышеупомянуту name = "targetMethod" value = "getProperty"/> <!-Настройка параметров здесь-> <name = "Arguments"> <!-Используйте элемент списка, чтобы перечислить несколько параметров метода вызова-> <sist> java.version </value> </list> </property> <Bean>
В приведенном выше примере это эквивалентно вызове метода GetProperty Java.lang.system с «java.version» в качестве параметра. Возвращаемое значение создаст фасоль с именем Javaversion. То есть эквивалентно:
javaversion = java.lang.system.getProperty ("java.version");
Как поле в предыдущей статье, если метод, который будет вызван, является статическим методом, существует также более краткий метод:
<bean id = "mybean"> <!-Используйте свойство Staticmethod, чтобы напрямую указать целевой метод целевого класса-> <name = "staticmethod" value = "com.abc.util.valuegenerator.getStaticValue" /> < /bean>
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.