DatabaseServiceTest.java 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import com.izouma.awesomeadmin.dao.CommonQueryMapper;
  2. import com.izouma.awesomeadmin.datasource.DataSource;
  3. import com.izouma.awesomeadmin.model.CommonQuery;
  4. import com.izouma.awesomeadmin.util.DatabaseUtil;
  5. import org.junit.Test;
  6. import org.junit.runner.RunWith;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.test.context.ContextConfiguration;
  9. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  10. import org.springframework.test.context.support.GenericXmlContextLoader;
  11. import org.springframework.transaction.annotation.Transactional;
  12. import java.lang.reflect.Field;
  13. import java.lang.reflect.InvocationHandler;
  14. import java.lang.reflect.Proxy;
  15. import java.util.List;
  16. import java.util.Map;
  17. @RunWith(value = SpringJUnit4ClassRunner.class)
  18. @ContextConfiguration(locations = {"classpath:/spring/applicationContext.xml"}, loader = GenericXmlContextLoader.class)
  19. @Transactional
  20. public class DatabaseServiceTest {
  21. @Autowired
  22. private CommonQueryMapper commonQueryMapper;
  23. @Test
  24. public void testLoadDatabaseTables() {
  25. List<String> tables = DatabaseUtil.loadDatabaseTables(null);
  26. System.out.println(tables);
  27. }
  28. @Test
  29. public void test() throws NoSuchFieldException, IllegalAccessException {
  30. CommonQuery commonQuery = new CommonQuery();
  31. commonQuery.setTableName("test_aaa");
  32. commonQueryMapper.getTableListAll(commonQuery);
  33. //获取val字段上的Foo注解实例
  34. DataSource foo = CommonQueryMapper.class.getAnnotation(DataSource.class);
  35. //获取Foo注解实例的 value 属性值
  36. String value = foo.value();
  37. //打印该值
  38. System.out.println("修改之前的注解值:" + value);
  39. System.out.println("------------以下是修改注解的值------------");
  40. //获取 foo 这个代理实例所持有的 InvocationHandler
  41. InvocationHandler invocationHandler = Proxy.getInvocationHandler(foo);
  42. // 获取 AnnotationInvocationHandler 的 memberValues 字段
  43. Field declaredField = invocationHandler.getClass().getDeclaredField("memberValues");
  44. // 因为这个字段事 private final 修饰,所以要打开权限
  45. declaredField.setAccessible(true);
  46. // 获取 memberValues
  47. Map memberValues = (Map) declaredField.get(invocationHandler);
  48. // 修改 value 属性值
  49. memberValues.put("value", "dataSourceSqlserver");
  50. // 获取 foo 的 value 属性值
  51. String newValue = foo.value();
  52. System.out.println("修改之后的注解值:" + newValue);
  53. commonQueryMapper.getTableListAll(commonQuery);
  54. }
  55. }