gunnersk / learning-blog Goto Github PK
View Code? Open in Web Editor NEWall learning notes
all learning notes
逻辑结构
线性结构(有且只有一个开始结点和终端结点,并且所有结点最多有且只有一个直接前驱和直接后继)
线性表
栈
队列
串和数组
非线性结构(一个结点可能对应多个直接前驱和直接后驱)
树
图
分类2:
集合结构(数据间没有直接关系,不研究)
顺序结构(一对一)
树状结构(一对多)
网状结构(多对多)
存储结构
顺序存储
链式存储
索引存储
散列存储
数据的运算
查找、排序、插入、删除、修改等
算法特性
输入:以待解决的问题作为输入
输出:输入对应指令集处理后得到的信息
可行性:每一条指令都能实现,能在有限的时间内完成
有穷性:执行的指令个数有限,且可以在有限时间内完成
确定性:对于特性的合法输入,对应的输出是唯一的
时间复杂度
时间频度:算法中语句执行的次数,表示为T(n),n表示问题规模
时间复杂度:一般知道算法的规模就好了,没必要知道他执行语句的具体次数,引入时间复杂度。时间频度去掉低阶项和首项常数就是时间复杂度 T(n) = O(n)表示时间复杂度
tips:时间频度不同的时间复杂度可能相同
最坏时间复杂度和平均时间复杂度:如果不特别说明,一般讨论的都是最坏时间复杂度
计算方法
找出基本语句,执行次数最多的就是,通常是内层循环
只需计算基本语句执行次数的数量级,忽略低次幂和最高次幂的洗漱
常用时间复杂度级别
常数阶O(1)
线性阶O(n)
线性对数阶O(n*log2n)
平方阶O(n2)
立方阶O(n3)
空间复杂度
S(n) = O(n)表示空间复杂度
空间复杂度比时间复杂度分析要少
递归的空间复杂度一般比较高,代码短
JDK包含了java编译器、JRE、以及常用的java类库等。
JRE包含了核心虚拟机JVM、其他的类加载器、字节码校验器以及大量的基础类库等运行java程序的其他环境支持。
tips:如果只是运行java程序,只需要JRE就可以了,不用JDK全套。
bin:存放了各种工具命令,例如 javac, java
jre:运行所需的JRE环境
lib:存放了工具命令的实际执行程序
例如java.exe就是用java编写的,这个类就是tool.jar文件中sun/tools/javac路径下的Main类。
bin路径下的绝大部分命令都是包装了tool.jar中的工具类
src.zip:存放java所有核心类库的源代码
AOP: 中文名称面向切面编程
定义:
常用概念
切点:pointcut
前置通知: 在切点之前执行的功能. before advice
后置通知: 在切点之后执行的功能,after advice
异常通知:如果切点执行过程中出现异常,会触发异常通知.throws advice
切面:所有功能总称叫做切面
织入: 把切面嵌入到原有功能的过程叫做织入
作用(待完善):aop都是拦service层方法
spring 提供了 2 种 AOP 实现方式
Schema-based
每个通知都需要实现接口或类
配置 spring 配置文件时在aop:config配置
AspectJ
每个通知不需要实现接口或类
配置 spring 配置文件是在aop:config的子标签aop:aspect中配置
spring的applicationcontext文件头的xmlns属性是引入schema的
下面通提代码来说明前置、后置、异常、环绕通知的用法,以下是两个类的说明
Demo类作用:用Demo类里的方法来作为切点(相当于service层的方法)
Test类作用:调用Demo类中的方法来测试AOP功能
前置通知
applicationContext.xml配置文件,applicationcontext文件头的xmlns属性是引入schema的
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="mybefore" class="cn.gunners.advice.MyBeforeAdvice"></bean>
<bean id="myafter" class="cn.gunners.advice.MyAfterAdvice"></bean>
<!-- 配置切面 -->
<aop:config>
<!-- 配置切点 -->
<!-- 第一个星号表示声明出通配符 -->
<aop:pointcut expression="execution(* cn.gunners.test.Demo.demo2())" id="mypoint"/>
<!-- 匹配cn.gunners.test.Demo类下所有无参方法 -->
<aop:pointcut expression="execution(* cn.gunners.test.Demo.*())" id="mypoint"/>
<!-- 匹配cn.gunners.test.Demo任意类型参数的方法 -->
<aop:pointcut expression="execution(* cn.gunners.test.Demo.*(..))" id="mypoint"/>
<!--匹配cn.gunners.test包下任意方法 -->
<aop:pointcut expression="execution(* cn.gunners.test.*.*(..))" id="mypoint"/>
<!-- 配置通知 -->
<aop:advisor advice-ref="mybefore" pointcut-ref="mypoint"/>
<aop:advisor advice-ref="myafter" pointcut-ref="mypoint"/>
</aop:config>
<bean id="demo" class="cn.gunners.test.Demo"></bean>
Demo类
public class Demo{
public void demo4(String name){
System.out.println("demo4");
}
}
Advice类
public class MyBeforeAdvice implements MethodBeforeAdvice {
@Override
public void before(Method arg0, Object[] arg1, Object arg2)
throws Throwable {
//arg0:切点方法对象,Method对象
System.out.println("ִ切点方法对象:"+arg0+",方法名:"+arg0.getName());
//arg1:切点方法参数
if(arg1 != null && arg1.length > 0){
System.out.println("切点方法参数:"+arg1[0]);
}else{
System.out.println("切点没有参数");
}
//arg2:切点在哪个对象中
System.out.println("对象:"+arg2);
System.out.println("ִ执行前置通知");
}
}
Test类
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Demo demo = ac.getBean("demo",Demo.class);
demo.demo4("传递的参数");
}
}
后置通知
applicationContext.xml配置文件,下面的applicationcontext都省略文件头的xmlns属性
看前置通知的xml文件
Demo类
public class Demo{
public void demo4(String name){
System.out.println("demo4");
}
public String demo5(String name){
System.out.println("demo5");
return "demo5的返回值";
}
}
Advice类
public class MyAfterAdvice implements AfterReturningAdvice {
@Override
public void afterReturning(Object arg0, Method arg1, Object[] arg2,
Object arg3) throws Throwable {
//arg0:切点方法返回值
System.out.println("arg0:"+arg0);
//剩下的arg跟前置通知的一样
System.out.println("arg1:"+arg1);
System.out.println("arg2:"+arg2);
System.out.println("arg3:"+arg3);
System.out.println("ִ执行后置通知");
}
}
Test类
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Demo demo = ac.getBean("demo",Demo.class);
demo.demo4("传递的参数");
demo.demo5("demo5的参数");
}
}
异常通知
applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
<!-- 省略文件头的xmlns属性 -->
<!-- 异常通知 -->
<bean id="mythrow" class="cn.gunners.advice.MyThrow"></bean>
<aop:config>
<aop:pointcut expression="execution(* cn.gunners.test.Demo.demo1())" id="mypoint"/>
<aop:advisor advice-ref="mythrow" pointcut-ref="mypoint"/>
</aop:config>
<bean id="demo" class="cn.gunners.test.Demo"></bean>
</beans>
Demo类
在这里面使切点方法出现异常,但是不要在里面try/catch,要使用Throw拦截异常就不要再切点方法里自己捕获异常
public class Demo{
public void demo1() throws Exception{
int i = 5/0; //算术异常
System.out.println("demo1");
}
}
Advice类 要实现接口
public class MyThrow implements ThrowsAdvice {
//schema-base方式的异常必须实现接口,然后自己写方法(因为schema-base方式在配置切点的时候直接配置异常通知类就好,不用指定异常通知的具体方法,
//所以只有实现特定的接口了他才知道要用哪个方法,而aspect方式配置切点有手动指定方法,所以不用实现特定接口,这里要区别开来),且必须叫afterThrowing,1个或4个参数
//异常类型要和切点报的异常类型一致,例如下面的ArithmeticException,这个异常方法只能应用在报ArithmeticException异常的切点
public void afterThrowing(ArithmeticException ex) throws Throwable {
System.out.println("执行异常通过-schema-base方式");
}
public void afterThrowing(Method m, Object[] args, Object target, Exception ex) {
System.out.println("执行异常通知");
}
}
Test类
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Demo demo = ac.getBean("demo",Demo.class);
try {
demo.demo1();
} catch (Exception e) {
// e.printStackTrace();
}
}
}
环绕通知
applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
<!-- 省略文件头的xmlns属性 -->
<!-- 环绕通知 -->
<bean id="myarround" class="cn.gunners.advice.MyArround"></bean>
<aop:config>
<aop:pointcut expression="execution(* cn.gunners.test.Demo.demo1())" id="mypoint"/>
<aop:advisor advice-ref="myarround" pointcut-ref="mypoint"/>
</aop:config>
<bean id="demo" class="cn.gunners.test.Demo"></bean>
</beans>
Demo类
public class Demo{
public void demo1() throws Exception{
System.out.println("demo1");
}
}
Advice类
public class MyArround implements MethodInterceptor{
//环绕通知就是前置后置通知放一起
public Object invoke(MethodInvocation arg0) throws Throwable {
System.out.println("环绕-前置");
Object result = arg0.proceed();//放行,调用切点方式
System.out.println("环绕-后置");
return result;
}
}
Test类
调用切点方法就得了
前置通知
后置通知
异常通知
applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
<!-- 省略文件头的xmlns属性 -->
<!-- 先声明异常类MyThrowAdvice -->
<bean id="mythrow" class="cn.gunners.advice.MyThrowAdvice"></bean>
<!-- 配置切面,下面必须明确指定异常通知类和异常方法 -->
<aop:config>
<!-- 配置aspect异常,引用上面定义的id为mythrow的bean对应的异常通知类 -->
<aop:aspect ref="mythrow">
<!-- 配置切点,即作用于哪个切点的异常 -->
<aop:pointcut expression="execution(* cn.gunners.test.Demo.demo1())" id="mypoint"/>
<!-- 配置异常,method是上面引入的异常通知类的myexception方法 -->
<!-- <aop:after-throwing method="myexception" pointcut-ref="mypoint"/> -->
<!-- throwing是异常对象名,必须和异常通知类中方法的参数名(异常对象名)相同(也可以不在方法中声明异常对象参数) -->
<aop:after-throwing method="myexception" pointcut-ref="mypoint" throwing="e"/>
</aop:aspect>
</aop:config>
<bean id="demo" class="cn.gunners.test.Demo"></bean>
</beans>
Demo类
在这里面使切点方法出现异常
public class Demo{
public void demo1() throws Exception{
int i = 5/0; //算术异常
System.out.println("demo1");
}
}
Advice类 不用实现接口
public class MyThrowAdvice {
//异常通知类的方法的参数名相同必须和xml文件中切点异常的throwing异常对象名一致(也可以不在方法中声明异常对象参数)
public void myexception(Exception e){
System.out.println("执行异常通知"+"异常message:"+e.getMessage());
}
}
Test类
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Demo demo = ac.getBean("demo",Demo.class);
try {
demo.demo1();
} catch (Exception e) {
// e.printStackTrace();
}
}
环绕通知
nexus安装与介绍
1.1 最好新建一个文件夹(建议命名为nexus),把nexus压缩包的东西解压到这个文件夹底下
1.2 解压出来有两个文件夹:nexus-2.11.4-01和sonatype-work
nexus-2.11.4-01:这个文件夹里面有个nexus文件夹,里面是一个java编写的web项目,是本地私服
对开发人员提供的一个网页面板
sonatype-work:这个文件夹是工作目录,其实就是仓库。私服从**仓库下载的东西就放在这个文件夹
maven项目就从这个文件夹里下载东西
配置nexus
2.1. 修改防火墙,开放nexus私服端口访问
2.1.1 查看防火墙,可以看到只开放了22端口 service iptables status
2.1.2 因为nexus要用8081端口,所以还要给他在iptables文件里添加8081端口
编辑iptables文件:vi /etc/sysconfig/iptables
添加8081端口:复制粘贴这一行,把22改成8081即可
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22(8081) -j ACCEPT
2.1.3 然后重启防火墙:service iptables restart
2.1.4 再次查看防火墙:service iptable status 可以看到多了个8081端口
然后就把防火墙关掉,自己的虚拟机都关掉防火墙 service iptables stop
启动nexus
切换到/usr/local/nexus/nexus-2.11.4-01/bin目录
启动nexus:./nexus start
查看nexus状态:./nexus status 可查看其pid号(进程号)
停止nexus:./nexus stop
访问nexus首页:IP地址+端口号(8081)+nexus
登录nexus
4.1 账号密码
默认登录账号:admin
默认登录密码:admin123
可在security--Users中修改用户信息
4.2. 检查仓库
在Views/Repositories--Repositories 可查看仓库信息
4.2.1 仓库类型Type简述:
4.2.1.1 group(仓库组) nexus通过仓库组来管理各种仓库,访问仓库组等于访问他管理的各种仓库
4.2.1.2 hosted(宿主仓库)
1. releases 发布版本
2. snapshots 快照版本
3. 3rd party
4.2.1.3 proxy(代理仓库)
在Central仓库下面的configuration中的 download remote indexes 改为true 按save保存
表示允许远程下载,把远程仓库中的所有文件都下载到本地
4.2.1.4 virtual(虚拟仓库) 前三个较常用
注意:1.**仓库更新,nexus私服的东西也跟着更新,不过不是自动更新,是触发更新,就是maven项目
访问私服需要下载某个项目的时候,私服发现这个索引不存在,就会自动更新。
2.索引库就是jar包
配置maven的settings.xml文件
5.1 在settings文件中配置私服信息
修改maven的setting.xml配置文件,在<service>标签中添加以下几个server信息
5.1.1 tomcat的server信息,原来有的就不用加了
<server>
<id>tomcat7</id>
<username>tomcat</username>
<password>tomcat</password>
</server>
5.1.2 nexus信息,id自定义,自己记住
<server>
<id>nexus-releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
5.1.3 nexus信息,id自定义,自己记住
<server>
<id>nexus-snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
username 和 password用nexus里面提供的,在User里面查看,可在User里面Add添加用户
5.1.4 profile标签,详见maven的settings.xml文件
5.1.5 settings.xml文件不能带中文字符,否则eclipse不能导入配置文件
settings.xml文件只需配置一次,所有maven工程都可以通用
配置maven工程的pom文件
此pom文件在maven的顶级父工程中定义,所有子工程自动依赖导入
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.1.105:8081/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.1.105:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
<!-- 这是一个向本地私服上传的东西提供源代码信息的插件
没有这个插件就只有提供jar包,字节码,没有源代码信息 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
离线手动安装索引库
7.1 在4.2.1.3中,如果允许远程下载索引,由于文件比较大,下载速度会很慢,这时可以提前先把文件下载下来,然后再安装进去
步骤:
1. 下载以下三个文件放在一个文件夹zip(命名随意)
nexus-maven-repository-index.gz (http://repo.maven.apache.org/maven2/.index/最下面)
nexus-maven-repository-index.properties (http://repo.maven.apache.org/maven2/.index/最下面)
indexer-cli-5.1.1 (百度自己找)
Java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
2. 切换到zip目录,执行Java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
文件较大,需要等待大约10分钟左右的解压过程,解压完成后停止nexus服务
3. 删除\nexus\sonatype-work\nexus\indexer\central-ctx 中内容,把解压后indexer文件夹中内容复制到
/nexus/sonatype-work\nexus\indexer\central-ctx 中,启动nexus
7.2 索引安装完之后就Run as--install
8.1 只能发布到宿主仓库(Type为hosted的仓库)
8.1.1 如果版本号以SNAPSHOT结尾的就会发布到快照库
8.1.2 不以SNAPSHOT结尾的发布到Releases库
8.1.3 第三方库必须手工上传,无法通代码发布,在3rd party底下的Artifact Upload那里挨个上传
8.2 以deploy(部署)命令run maven项目
注意:同一个版本的项目在同一个库(比如Releases)中只能发布一次,多次发布需要修改nexus配置
在对应库的Configuration中设置Allow Redeploy
8.3 install作用
8.3.1 扫描pom文件里的所有依赖,如果依赖在本地仓库不存在,会访问私服或者镜像仓库,然后再下载
8.3.2 把jar包安装到本地仓库
3.Team--git--Configuration--Add Entry
entry1: key=http.sslVersion
value=tlsv1.2
entry2: key=user.name
value=gunners_K
entry23: key=user.email
value=
eclipse默认只支持TSL协议(http加密协议)只有1.0和1.1版本,要让他支持1.2版本,能正常访问github,
需要修改eclipse.ini文件,在最后添加这句代码-Dhttps.protocols=TLSv1.1,TLSv1.2
增加和提交内容
5. 创建一个本地工程,右键Team--share project,选中本地仓库,finish
如果创建的本地工程不是远程或本地仓库,工程会有一个问号的图标显示NO-HEAD,即在本地仓库找不到头信息
项目右键team--commit--勾选要提交到本地仓库的文件
--点击commit and push 表示把工程同步保存到本地仓库,同时把本地仓库的信息同步更新到远程仓库(github网站)
--点击commit 表示只把工程同步保存到本地仓库
这时候工程会有一个圆柱的图标,表示工程目录与本地仓库一一对应,已经同步成功
如果圆柱变成>号则表示工程被修改,与本地仓库的不统一,还没更新到本地仓库
这时候需要右键--team--commit,把项目或文件提交更新到本地仓库
如果修改了项目,只是提交修改到本地仓库,项目后面会有向上的箭头和一个数字x,表示有x步操作未同步到远程仓库
右键team--commit--commit and push将修改提交到远程仓库可解决
也可以右键team--remote--push
如果是向下的箭头和一个数字,则表示项目比远程仓库少东西,较少见
总之提交可分为两种:
一种是分为两步,先提交到本地仓库,再提交到远程仓库
一种是只提交到本地仓库
更新内容
更新内容指的是从远程下载到本地
分支管理
冲突管理
删除内容
还有忽略文件没看
Spring核心功能(必须弄明白,面试就问这三个)
IoC/DI 控制反转/依赖注入
AOP 面向切面编程
声明式事务
Spring 框架中重要概念
把Spring 当作一个大容器
BeanFactory 接口是老版本
从 Spring3 开始把 Spring 框架的功能拆分成多个 jar,Spring2 及以前就一个 jar
IoC是什么:将程序员主动通过new实例化对象的事情转交给spring负责
IoC最大的作用:解耦
通过构造方法创建
无参构造创建(默认情况)
有参构造创建,需要明确配置
指定参数(通过这三个参数精确定位到哪个构造方法的参数,以确定使用哪个构造方法)
index 参数的索引,从0开始
name 参数名
type 数据类型
给参数赋值
ref 参数是实体类的用ref定义,表示引用另一个bean
value 基本数据类型或string用value
tips:如果设定的条件匹配多个构造方法,则执行最后的构造方法
实例工厂
public class PeopleFactory {
//实例工厂方法
public People newInstance(){
return new People(1,"测试");
}
}
<bean id="factory" class="cn.gunners.pojo.PeopleFactory"></bean>
<bean id="peo1" factory-bean="factory" factory-method="newInstance"></bean>
静态工厂
不需要创建工厂,直接快速创建需要的对象
public class PeopleFactory {
//静态工厂方法
public static People newInstance(){
return new People(1,"测试");
}
}
<bean id="peo2" class="cn.gunners.pojo.PeopleFactory" factory-method="newInstance"></bean>
set赋值(注入)走的是set方法
public class People {
private int id;
private String name;
private Set<String> sets;
private List<String> list;
private String[] strs;
private Map<String, String> map;
private Desk desk;
}
<bean id="peo" class="cn.gunners.pojo.People">
<!-- 两种写法 -->
<property name="id" value="222"></property>
<property name="name">
<value>张三</value>
</property>
</bean>
<bean id="peo" class="cn.gunners.pojo.People">
<property name="sets">
<set>
<value>1</value>
<value>2</value>
<value>3</value>
<value>4</value>
</set>
</property>
</bean>
<bean id="peo" class="cn.gunners.pojo.People">
<property name="list">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
</bean>
<!-- 如果list中只有一个值,还可以这么写,以后list如果只有一个值经常这么写-->
<!-- <property name="list" value="1">
</property> -->
<bean id="peo" class="cn.gunners.pojo.People">
<property name="strs">
<array>
<value>1</value>
<value>2</value>
<value>3</value>
</array>
</property>
</bean>
<!-- 如果数组中只有一个值,也可以跟list一样的写法-->
<!-- <property name="strs" value="测试">
</property> -->
<bean id="peo" class="cn.gunners.pojo.People">
<property name="map">
<map>
<entry key="a" value="b"></entry>
<entry key="c" value="d"></entry>
</map>
</property>
</bean>
<bean id="peo" class="cn.gunners.pojo.People">
<property name="demo">
<props>
<prop key="key">value</prop>
<prop key="key1">value1</prop>
</props>
</property>
</bean>
<bean id="desk" class="cn.gunners.pojo.Desk">
<property name="id" value="1"></property>
<property name="price" value="12"></property>
</bean>
<!-- 只需在文件中定义一个实体类的bean,与本bean的前后顺序无关 -->
<property name="desk" ref="desk"></property>
<bean id="desk" class="cn.gunners.pojo.Desk">
<property name="id" value="1"></property>
<property name="price" value="12"></property>
</bean>
<!-- 只需在文件中定义一个实体类的bean,与本bean的前后顺序无关 -->
<property name="desk" ref="desk"></property>
<bean id="dataSouce" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://193.112.78.108:3306/ssm"></property>
<property name="username" value="root"></property>
<property name="password" value="MYchen135136137"></property>
</bean>
<!-- 创建SqlSessionFactory对象 -->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据库连接信息来源于dataSource -->
<property name="dataSource" ref="dataSouce"></property>
</bean>
<!-- 扫描器:相当于mybatis.xml中mappers下的package标签,扫描cn.gunners.mapper包后会给对应接口创建对象 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 要扫描哪个包 -->
<property name="basePackage" value="cn.gunners.mapper"></property>
<!-- 和factory产生关系 -->
<property name="sqlSessionFactory" ref="factory"></property>
</bean>
<!-- 管理AirportServiceImpl实现类,并为其mapper设值注入 -->
<bean id="airportService" class="cn.gunners.service.impl.AirportServiceImpl">
<property name="airportMapper" ref="airportMapper" ></property>
</bean>
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.