发表于: 2020-04-27 23:52:06

2 1327


今天完成的事情:


记录下项目部署到服务器过程


1.执行  mvn  package  生成war包

2.然后把war包放到  服务器 tomcat的webapps下

3.编辑tomcat的server.xml文件


添加如下内容

<Context path="/" docBase="tianbo.war" debug="0" privileged="true" reloadable="true"/>



navicat连接服务器 数据库

(服务器放开3306端口)




学习了aop的相关知识


spring  aop的主要作用

就是为了更清晰的逻辑,可以让你的业务逻辑去关注自己本身的业务,少写重复代码。

这些其他的事情包括:安全,事物,日志等。


比如下图的绿色公共部分  都可以用aop去实现   减少对核心代码的干扰。





先写一个简单的aop例子


spring  aop所需依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.4</version>
</dependency>


文件头


开启aop注解


扫描切面类所在的包


定义一个一个切面类  

记录每个方法运行完毕所消耗的时间

@Component
@Aspect
public class AopAspect {
private static Logger logger = Logger.getLogger(AopAspect.class);
//引入日志配置
/**
* 定义切点函数
*/
@Pointcut("execution(* com.chuilun.controller.*.*(..)) || execution(* com.chuilun.service.*.*(..))")
void time() {
}
@Around("time()")
public Object logTimer(ProceedingJoinPoint thisJoinPoint) throws Throwable {
// 计时并调用目标函数
long start = System.currentTimeMillis();
Object result = thisJoinPoint.proceed();
long time = System.currentTimeMillis() - start;
logger.info("本次运行消耗时间为:" + time + "ms");
return result;
}


运行其中一个方法     

自动打印日志






aop里有很多难理解的术语  

需要多看几遍  或者理清楚代码   才能慢慢理解




个人理解的AOP:


先说连接点(joinPoint):  类中的每个方法都可以成为一个连接点


步骤:


1. 定义一个切面类(aspect)   (里面包含 切入点pointcut     和通知advice)


以刚才的代码为例子    一个简单的切面类 

 @aspect是用注解方法  也可以在spring xml文件配置  没有注解简单    



2. 定义一个切点(ponincut ) (在哪些类下的方法中运行  根据规则可以定义很多)

@Pointcut("execution(* com.chuilun.controller.*.*(..)) || execution(* com.chuilun.service.*.*(..))")
void time() {
}


这里采用的是通配符方法   定义切入点函数

不展开写了    有好几种方式 

我这里的意思是     

 com.chuilun.controller   以及  service包下     任意任意返回值   任意名称   任意参数的方法



3. 编写通知(advice) ( 在某个切点上需要执行的动作,即logTimer中的代码。 以及执行方式around)


@Around("time()")
public Object logTimer(ProceedingJoinPoint thisJoinPoint) throws Throwable {
// 计时并调用目标函数
long start = System.currentTimeMillis();
Object result = thisJoinPoint.proceed();
long time = System.currentTimeMillis() - start;
logger.info("本次运行消耗时间为:" + time + "ms");
return result;
}


5种执行方式 

@Before(前置通知   切点方法执行前  执行advice代码

@AfterReturning(后置通知  切点方法执行后   执行advice代码)

@Around(环绕通知 )

@AfterThrowing(抛出通知   切点方法运行出错后 执行advice代码 )

@After   (最终通知  切点方法执行后  无论结果如何 都会执行advice代码)


他们的执行顺序  



4.织入(weaving)  找到切点定义的方法 (连接点)   把切面应用到目标方法中


spring  aop的用途还有很多,我只是知道aop能干嘛,以及简单的应用,还需要不断学习。



任务三总结


一    任务进度是否符合预期,是否延期,如果延期,原因是什么,如何避免下次继续延期

任务总耗时35天   很慢、


原因: 1.  疫情期间没有学习     耽误了学习进度

            2.疫情结束后  长时间不学习,之前学的东西有点落下了  重复看又浪费了些时间。

            3.遇到问题瞎琢磨,问问题比较少,间歇性划水,耽误时间。


二    脑图分析


三    任务中遇到哪些疑难问题,最终是如何解决的,有哪些值得分享的收获

1. 刚开始任务有些看不懂原型图,主要是不知道自己该干嘛

但后面根据需求建完数据表后,对需求理解就清楚多了。


2.数据库建表前,要先理清表之间1对1  1对多  多对多的关系,然后再建表。

建表过程中多用逻辑外键(通过sql语句增强表之间的联系)  少用物理主键(数据库内设置外键)


3. java实体类字段  和  数据库表字段可以不相同,根据需求自己定义实体类。

我前面因为这个还卡了一段时间 


4.添加角色后的的权限设计模块,也卡了一段时间。

经过师兄指引后利用mybatis批量插入完成了功能,主要还是对业务关系理解的不够深入。


5.通过做项目主键逐渐理解了三层架构   

 以及三层架构的作用

开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用;
6、结构更加的明确;
7、在后期维护的时候,极大地降低了维护成本和维护时间;
8、避免了表示层直接访问数据访问层,表示层只和业务逻辑层有联系,提高了数据安全性。
9、有利于系统的分散开发,每一个层可以由不同的人员来开发,只要遵循接口标准,利用相同的对象模型实体类就可以了,这样就可以大大提高系统的开发速度。





明天计划的事情:

深度思考

准备任务4



返回列表 返回列表
评论

    分享到