2017-02-14 21 views
0

У меня возникла какая-то странная проблема при написании теста JUnit, который я могу использовать для класса Autouired one service, но не смог авторизовать другой. Конфигурация ApplicationContext ServiceImpl1 и ServiceImpl2 аналогична.Как получить экземпляр класса реализации из экземпляра прокси-сервера в Java

@Autowired 
private ServiceImpl1 serviceImpl1; //This one works. 

@Autowired 
private ServiceImpl2 serviceImpl2; //This one doesn't work. 

Но это один будет работать

@Autowired 
private Service2 service2; //This one works. 

Здесь ServiceImpl2 класс реализации Service2. Как я могу получить экземпляр ServiceImpl2 из service2?

Я хотел бы протестировать некоторые методы ServiceImpl2, которые не находятся в интерфейсе Service2.

Или, если вы знаете, как я могу сделать работу Autowired для класса ServiceImpl2?

+0

Есть ли боб создан/сконфигурировано, что вы можете autowire для этого типа? – Stultuske

+0

Да. ServiceImpl1 и ServiceImpl2 настроены в том же applicationContext.xml –

+0

, какую ошибку вы получаете? – Stultuske

ответ

0

Я нахожу ответ из другого сообщения.

Я считаю, хорошо для меня решение по http://www.techper.net/2009/06/05/how-to-acess-target-object-behind-a-spring-proxy/

@SuppressWarnings({"unchecked"}) 
protected <T> T getTargetObject(Object proxy, Class<T> targetClass) throws Exception { 
    if (AopUtils.isJdkDynamicProxy(proxy)) { 
    return (T) ((Advised)proxy).getTargetSource().getTarget(); 
    } else { 
    return (T) proxy; // expected to be cglib proxy then, which is simply a specialized class 
    } 
} 

Использование

@Override 
protected void onSetUp() throws Exception { 
    getTargetObject(fooBean, FooBeanImpl.class).setBarRepository(new MyStubBarRepository()); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^