Function & BiFunction
- Function
- T is the accept type
- R is the return type
- BiFunction
- T,U is the accept type
- R is the return type
@PostConstruct
注释方法
@PostConstruct该注解被用来修饰一个非静态的void()方法
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)
This
- 引用成员变量 this.name=name
- 调用类的构造方法: this("hello");
- 返回对象的值:return this;
- instance = this;:获得该类的实例。
单例模式Singleton
registry.gauge
gauge(meric,tags,meric,metricData::get):
meric和tags拼接,meric从后面的函数获得:mericdata.get
LOG
- log.isTraceEnabled():方法作用是判断记录器Trace跟踪是否激活。Trace跟踪激活后一般会打印比较详细的信息。
- log.trace:
Log4j中将要输出的Log信息定义了5种级别:
依次为DEBUG、INFO、WARN、ERROR和FATAL.
并无trace级别,因此trace级别同debug级别
Debug类提供一组帮助调试代码的方法和属性。Trace类提供一组帮助跟踪代码执行的方法和属性,通俗的说就是为在不打断程序的调试或跟踪下,用来记录程序执行的过程。
Debug只在debug状态下会输出,Trace在Release下也会输出,在Release下Debug的内容会消失
ConcurrentHashMap
ConcurrentHashMap使用的是分段锁技术,将ConcurrentHashMap将锁一段一段的存储,然后给每一段数据配一把锁(segment),当一个线程占用一把锁(segment)访问其中一段数据的时候,其他段的数据也能被其它的线程访问,默认分配16个segment。默认比Hashtable效率提高16倍.
Stream
data.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.forEach(entry -> {log.trace("{}: {}", entry.getKey(), entry.getValue());});
- entrySet:变成一个k-v的set集合
- Map.Entry.comparingByKey()
- foreach
computeIfPresent
Annotation
@Slf4j
- 日志标准
private static final Logger logger = LoggerFactory.getLogger(LoggerTest.class);
logger.debug("debug");
logger.info("info");
logger.error("error");
@Component
- @controller: controller控制器层(注入服务)
- @service : service服务层(注入dao)
- @repository : dao持久层(实现dao访问)
- @component: 标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的
)
mvc:model-view-controller
model:存取数据的对象或java pojo
view:可视化
controller:控制器,控制数据流向模型对象
三层架构:数据访问层dao层
ssh:struts+spring+hibernate
controller: 用户输入-->controller
model:controller--> model--> view
model--->datebase
view: 显示给用户
MVC编程模式:
- model表示应用程序核心
- view 显示数据
- controller:处理输入
struts
- actionservlet
- action
- actionfrom
- actionmapping
- actionforward
Hibernate 特征
对象关系映射框架,对JDBC进行了轻量级的对象封装。自动生成SQL语句。
对象的调用流程:JSP—Action—Service—DAO—Hibernate—数据库。
DAO层
DAO层叫数据访问层,全称是data access object.一定是和数据库的某一个张表一一对应。封装了增删改查。只有原子操作。
@Resository持久层
Service层
服务层,粗略理解就是对一个或多个dao进行封装,封装为一个服务,需要事务控制。
@service
controler层
负责请求转发,接受页面过来的参数。传给service处理,接受返回值,再传给页面。
@controller层
总结
DAO面向表,Service面向业务。后端开发时先数据库设计出所有表,然后对每一张表设计出DAO层,然后根据具体的业务逻辑进一步封装DAO层成一个Service层,对外提供成一个服务。