parent
368afc0c1b
commit
c29536ae8f
@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
|
||||
*
|
||||
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed
|
||||
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.tencent.cloud.polaris.config.spring.property;
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.BeanFactoryAware;
|
||||
|
||||
/**
|
||||
* Test example.
|
||||
*
|
||||
* @author lingxiao.wlx
|
||||
*/
|
||||
public class Person implements BeanFactoryAware {
|
||||
|
||||
private String name;
|
||||
|
||||
private String age;
|
||||
|
||||
private BeanFactory beanFactory;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getAge() {
|
||||
return age;
|
||||
}
|
||||
|
||||
public void setAge(String age) {
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
public BeanFactory getBeanFactory() {
|
||||
return beanFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "User{" + "name='" + name + '\'' + ", age=" + age + '}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
|
||||
this.beanFactory = beanFactory;
|
||||
}
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
|
||||
*
|
||||
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed
|
||||
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.tencent.cloud.polaris.config.spring.property;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.tencent.polaris.api.utils.CollectionUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
|
||||
/**
|
||||
* Test for {@link SpringValueDefinitionProcessor}.
|
||||
*
|
||||
* @author lingxiao.wlx
|
||||
*/
|
||||
public class SpringValueDefinitionProcessorTest {
|
||||
|
||||
@Test
|
||||
public void springValueDefinitionProcessorTest() {
|
||||
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
|
||||
Person person = context.getBean(Person.class);
|
||||
|
||||
SpringValueRegistry springValueRegistry = context.getBean(SpringValueRegistry.class);
|
||||
|
||||
BeanFactory beanFactory = person.getBeanFactory();
|
||||
Collection<SpringValue> name = springValueRegistry.get(beanFactory, "name");
|
||||
Assert.assertFalse(CollectionUtils.isEmpty(name));
|
||||
Optional<SpringValue> nameSpringValueOptional = name.stream().findAny();
|
||||
Assert.assertTrue(nameSpringValueOptional.isPresent());
|
||||
|
||||
SpringValue nameSpringValue = nameSpringValueOptional.get();
|
||||
Method method = nameSpringValue.getMethodParameter().getMethod();
|
||||
Assert.assertTrue(Objects.nonNull(method));
|
||||
Assert.assertEquals("setName", method.getName());
|
||||
Assert.assertEquals("${name:test}", nameSpringValue.getPlaceholder());
|
||||
Assert.assertFalse(nameSpringValue.isField());
|
||||
Assert.assertEquals(String.class, nameSpringValue.getTargetType());
|
||||
|
||||
|
||||
Collection<SpringValue> age = springValueRegistry.get(beanFactory, "age");
|
||||
Assert.assertFalse(CollectionUtils.isEmpty(age));
|
||||
Optional<SpringValue> ageSpringValueOptional = age.stream().findAny();
|
||||
Assert.assertTrue(ageSpringValueOptional.isPresent());
|
||||
|
||||
SpringValue ageSpringValue = ageSpringValueOptional.get();
|
||||
Method method1 = ageSpringValue.getMethodParameter().getMethod();
|
||||
Assert.assertTrue(Objects.nonNull(method1));
|
||||
Assert.assertEquals("setAge", method1.getName());
|
||||
Assert.assertEquals("${age:10}", ageSpringValue.getPlaceholder());
|
||||
Assert.assertFalse(ageSpringValue.isField());
|
||||
Assert.assertEquals(String.class, ageSpringValue.getTargetType());
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
name=test
|
||||
age=10
|
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
|
||||
|
||||
<context:property-placeholder location="classpath:application-test.properties"/>
|
||||
|
||||
<!--Person-->
|
||||
<bean class="com.tencent.cloud.polaris.config.spring.property.Person">
|
||||
<property name="name" value="${name:test}"/>
|
||||
<property name="age" value="${age:10}"/>
|
||||
</bean>
|
||||
|
||||
<!--SpringValueDefinitionProcessor to process xml config placeholders -->
|
||||
<bean class="com.tencent.cloud.polaris.config.spring.property.SpringValueDefinitionProcessor">
|
||||
<constructor-arg index="0" ref="helper"/>
|
||||
<constructor-arg index="1" ref="polarisConfigProperties"/>
|
||||
</bean>
|
||||
|
||||
<!--Placeholder helper functions -->
|
||||
<bean id="helper" class="com.tencent.cloud.polaris.config.spring.property.PlaceholderHelper"/>
|
||||
|
||||
<!--PolarisConfigProperties -->
|
||||
<bean id="polarisConfigProperties" class="com.tencent.cloud.polaris.config.config.PolarisConfigProperties">
|
||||
<property name="autoRefresh" value="true"/>
|
||||
</bean>
|
||||
|
||||
<!--springValueRegistry -->
|
||||
<bean id="springValueRegistry" class="com.tencent.cloud.polaris.config.spring.property.SpringValueRegistry"/>
|
||||
|
||||
<!--Spring value processor of method -->
|
||||
<bean class="com.tencent.cloud.polaris.config.spring.annotation.SpringValueProcessor">
|
||||
<constructor-arg index="0" ref="helper"/>
|
||||
<constructor-arg index="1" ref="springValueRegistry"/>
|
||||
<constructor-arg index="2" ref="polarisConfigProperties"/>
|
||||
</bean>
|
||||
</beans>
|
Loading…
Reference in new issue