我有一个过滤服务,它的方法是通过方面分析的。作为一个例子,我将给你一段代码,我有一个问题
@Service
public class FilterService extends AbstractService {
private static final Logger log = LoggerFactory.getLogger(FilterService.class);
@Autowired
private FilterService self;
private final ItemsRepository itemsRepository;
private final Map<String, EnumFilter> enumFilters;
public FilterService(ReadWriteLock readWriteLock,
ItemsRepository itemsRepository,
CategoryRepository categoryRepository, ItemsMapper itemsMapper,
CharacteristicsRepository characteristicsRepository,
List<EnumFilter> enumFilters) {
super(readWriteLock.readLock());
this.itemsRepository = itemsRepository;
this.enumFilters = enumFilters.stream().collect(Collectors.toMap(EnumFilter::getId, y -> y));
}
@Profileable
public ItemsViewShared filterItems(@Nullable String categoryId,
@NotNull Set<String> ids,
@NotNull Lang lang,
@NotNull SortType sortType,
@NotNull FilterInfo filterInfo) {
try {
this.readLock.lock();
final ItemsViewShared itemsViewResponse = new ItemsViewShared();
List<Filter> allFilters = self.initNonSpecificFilters(lang, filterInfo);
@Profileable
private List<Filter> initNonSpecificFilters(@NotNull Lang lang, @NotNull FilterInfo filterInfo) {
final List<NumericFilter> allNumericNonSpecific = NumericFilter.getAllNonSpecific(lang, filterInfo);
final List<EnumOptionFilter> allEnumNonSpecific = enumFilters.values().stream()
.flatMap(x -> x.getAllOptions(lang, filterInfo).stream())
.collect(Collectors.toList());
据我所知,默认情况下,如果类不使用至少一个方法继承接口,那么将使用cglib代理,cglib通过继承工作。
问题是:当我打电话给
过滤器
方法,调试器在此方法中显示
这
-
过滤服务
.
此外,在这个方法中,这个类的另一个方法也应该被分析。为了让代理工作,我需要自连线。之后我通过
自初始化非特定筛选器
在调试器中我已经看到了
这
-
FilterService$$增强Rbyspringcglib
类中的所有变量都是空的,所以我得到了空指针异常。
为什么,如果cglib似乎是通过继承工作的呢?为什么在第一种方法中(filteritems)
这
-是一个没有cglib的类,但是当您从它调用另一个方法(filterTimes->initNotSpecificFilters)时,cglib已经出现。