在实现类的第一行加个断点,在调试step into进入了代理的时候,Resume就会到达下一个断点,也就是进入了你所想要的实现类。
注意,在重启服务器时; 需要将此断点去掉,否则不能已Debug方式重启服务器,原因是:已Debug方式启动服务器时,服务器会扫描程序断点,一般情况下的断点,服务器都能扫描过去,但是对于这种注入式的断点,服务器无法通过,原因一,可能是对于spring或者其他框架代码加入断点后,无法通过服务器扫描;原因二,自己代码的影响。
package com.syit.common;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.DefaultBeanNameGenerator;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
/**
*
* Spring bean 命名策略生成
*/
public class MyBeanNameGenerator extends DefaultBeanNameGenerator
{
/**
* 定义spring容器Bean名字与实现类的映射
* 比如GcbmglServiceImpl类,spring容器名字就是gcbmglService
*/
public String generateBeanName(BeanDefinition definition,
BeanDefinitionRegistry registry)
{
try
{
Class<?> clazz = Class.forName(definition.getBeanClassName());
String simpleName = ClassUtils.getShortName(clazz);
simpleName = StringUtils.uncapitalize(simpleName);
if (simpleName.endsWith("Impl"))
{
simpleName = simpleName.substring(0, simpleName.length() - 4);
}
else
{
simpleName = super.generateBeanName(definition, registry);
}
return simpleName;
}
catch (ClassNotFoundException e)
{
return super.generateBeanName(definition, registry);
}
}
}
<context:component-scan base-package="com.syit"
name-generator="com.syit.common.MyBeanNameGenerator" />