
com.joe.easysocket.server.backserver.mvc.impl.container.BaseBeanContainer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of socket-backserver Show documentation
Show all versions of socket-backserver Show documentation
socket框架,方便快速开发socket服务端和客户端
The newest version!
package com.joe.easysocket.server.backserver.mvc.impl.container;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.util.*;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.joe.easysocket.server.backserver.mvc.container.BeanContainer;
import com.joe.utils.concurrent.LockService;
import com.joe.utils.scan.ClassScanner;
import lombok.NonNull;
/**
* 提供最基础的实现,如果bean的类不包含无参数构造器那么该bean将不会被扫描到
*
* @author joe
*/
public class BaseBeanContainer implements BeanContainer {
private static final Logger logger = LoggerFactory
.getLogger(BaseBeanContainer.class);
private Map, Map> beanCache;
private List> allBeanClass;
private String[] args;
private boolean init = false;
private ClassLoader loader;
/**
* 默认构造器,参数传需要扫描的包(可以只传入跟目录,然后会自动递归)
*
* @param loader 加载bean class的ClassLoader
* @param args 要扫描的包
*/
public BaseBeanContainer(@NonNull ClassLoader loader, @NonNull String... args) {
this.loader = loader;
this.args = args;
}
@Override
public Map getBeansWithAnnotation(Class extends Annotation> annotationType) {
logger.debug("查找所有注解为{}的bean", annotationType);
if (annotationType == null) {
return Collections.emptyMap();
}
if (beanCache.containsKey(annotationType)) {
logger.debug("在缓存中找到注解为{}的bean集合", annotationType);
return beanCache.get(annotationType);
}
try {
LockService.lock(annotationType.getSimpleName());
if (beanCache.containsKey(annotationType)) {
logger.debug("在缓存中找到注解为{}的bean集合", annotationType);
return beanCache.get(annotationType);
}
logger.debug("缓存中不存在指定注解的bean集合,开始生成");
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy