У меня есть служба с открытыми методами для манипулирования базой данных, помеченная аннотацией org.springframework.transaction.annotation.Transactional
.
Я хочу получить доступ к закрытому методу (без аннотации транзакций) через отражение Java: service.getClass().getDeclaredMethod('privateMethod', args)
.
Когда я звоню, я получаю java.lang.NoSuchMethodException
.Когда я удаляю все аннотированные методы @Transactional
, это работает.Есть ли причина для такого поведения и как я могу это решить?
public class MyService {
@Transactional(readOnly = true)
public Integer publicMethodMarkedWithTransactional(int a, int b) {
//couple of database requests
return privateMethod(b, a);
}
private Integer privateMethod(int a, int b) {
return a + b;
}
}
public class MyServiceTest {
@Autowired
private MyService service;
@Test
public void test() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Method privateMethod = service.getClass().getDeclaredMethod("privateMethod", int.class, int.class);
privateMethod.setAccessible(true);
int res = (int) privateMethod.invoke(service, 5, 10);
assertEquals(5 + 10, res);
}
}