第五节 注解

三层模式:Dao 层  Server层 和springtest;

入口是Service层,在xml中写<id=’Service ’      >

Spring IoC创建对象之----无参构造函数原理:xml文件里直接配置的是UserEntity类

(实体类,该实体类中有无参构造函数),<bean id=”userEntity” class=”com.itmayi.entity.UserEntity” ></bean>

那么在入口类(springText)类中加载过xml文件后就可以得到 经默认构造函数初始化后的bean对象了,下面就可以使用这个对象了。

带参构造函数原理:在实体类中构建有参的构造函数,在xml中和上面的无参的区别是要在xml中配置参数,<bean id=”userEntity” class=”com.itmayi.entity.UserEntity” >

<constructor-org name=”name” value=”wangchuan”></constructor-arg>

<constructor-org name=”age” value=”17”></constructor-arg>

</bean>   //这样就给参数进行赋值!

工厂方法原理:

实例工厂:在实体类中再建一个工厂类,(里面有两种方法:实例方法和静态方法!),然后再xml中实例化工厂<bean id=”objectFactory” class=”com.itmayi.entity.objectFactory”></bean>

上面是配置好了工厂,如果要用工厂方法创建对象,那么接着下面来

<bean id=”getUserEntity” factory-bean=”objectFactory” factory-method=”getUserEntity”></bean>

//意思是使用上面的工厂objectFactory 的方法getUserEntity 来创建对象。

静态工厂:<bean id=”getStaticUserEntity” class=”com.itmayi.entity.objectFactory”>

Factory-method=”getStaticUserEntity”></bean>

//静态工厂方法可以直接用工厂的类标签(class)来配置

第五节:DI注入

属性方式注入(set方式注入):

此时要配置userservice的属性userDao(userDao在这里被引用)

Userservice中的UserDao要赋值!赋值时引用前面写的userDao,UserDao中要写set方法!

原理:使用set方法为对象注入属性,

P_name注入(p标签的方式)

<bean id=”userAction” class=”cn.itmayi.UserAction”

P:userDao-ref=”userDao”></bean>

原理:截取p标签后面的内容即:userDao 拿着这个内容去userService找有没有这个userDao的set方法,找到之后给userDao这个类赋值(userService中的userDao这个类

就有值了),p标签方法也是通过反射原理,也是通过set方法为UserDao赋值,

第八节:AOP

面向切面编程,应用场景在:权限、日志、控制

事物底层的实现原理用的就是AOP

代理设计模式静态代理和动态代理(包括jdk动态代理cglib动态代理

静态代理与动态代理的区别:静态代理要继承代理类,动态代理不需要继承代理类;

Jdk代理和cglib代理的区别:(共同点都是不需要代理类)但是jdk使用反射而cglib使用asm,

而Spring AOP原理用的是cglib动态代理 ??

在service层定义一个AOP类,然后在AOP类中定义begin和commit方法,把AOP注入到UserDao这个bean中,或者使用注解@compoent注入到bean中,

@compoent

Public class AOP{

}

然后再UserDao中使用

Public class UserService{

@Resource

Private UserDao userdao;

@Autowired      //使用这个注解就可以使用aop了,下面可以调用aop中的方法

Private Aop aop;

Public void add(){

Aop.begin(); //调用aop方法

UserDao.add();

Aop.commit();

}

}

//aop这种方式类似于静态代理,

第七节(下)

Spring boot 简化xml配置,全部用注解代替,而且是微服务架构模式;

首先在UserDao中使用@repository

@repository    //专门注入标识注解Dao层,相当于<bean id=”userDao” class=””></bean>

Public class UserDao{

Public add(){  }

}

然后注入service层

@Service  //通用在Service层 ,相当于<bean id=”userService” class=”   ”>

Public class UserService{

}

下面是使用注解的方式 xml怎样写

<!—开启注解权限-->

<context:component-scan base-package=”com.itmayi”></context:compenent-scan>

开启注解后,在service层中 UserService类上面使用@Service注解就可以达到xml配置的效果;

在UserService类中UserDao 引用前面使用@Resource注解达到xml配置的效果。

@Resource 与@autowired的区别:

@Resource 是jdk1.6才有的,默认是以名称查找的,查不到之后再以类型查找,而且; 而@autowired是spring框架自带的,默认是以类型查找的,否则再以名称查找;

而maven工程默认的是jdk1.5,这个时候可以把1.5的jdk移出,然后导入workStation中的jdk(buildPath->library->移出旧的—>add新的);这时候导入javax.annotation.Resource包就可以使用@Resource。@Resource默认以属性名称userDao去找bean对象,

如果注解和xml同时重复使用来创建对象,那么先找的是xml的方式,如果xml走不下去就找注解。

第八节-AOP编程
AOP:面向切面编程,功能:就是把关注点代码(权限、日志)与业务代码(Dao层)分离,

关注点:重复代码就叫做关注点,

切面:关注点形成的类就叫做切面(类),

面向切面编程指的是: 对很多功能都有的重复的代码抽取,再在运行的时候往业务方法上动态的植入“切面类代码”

切入点:执行目标对象方法,动态植入切面代码。可以通过切入点表达式,指定拦截那些类的哪些方法;给指定的类在运行的时候植入切面类代码。(也就是UserDao)

通过注解方式实现AOP

首先在xml中开启aop注解

<aop:aspect-autoproxy></aop:aspect-autoproxy>

如果使用aop注解方法的话,UserService中就不会写之前的调用代码,然后是在AOP类前面加@Aspect注解,即

@Component 将切面注入到容器中

@Aspect    //作用是标识为切面

Public class Aop{

//前置通知

@Before(“execution(*com.itmayi.service.UserService.add(..))”)   //表示在方法之前执行;引用的UserService这个类的add方法,其他是固定格式。

//开启事物。。。。。

Public void begin(){};

}

//后置通知

@After(“execution(*com.itmayi.service.UserService.add(..))”)

//异常通知

@AfterThrowing(“execution(*com.itmayi.service.UserService.add(..))”)

Public void error(){

}

//表示如果有异常,就不会执行下面的函数。如果没有异常,它会在后置通知前执行,

@AfterReturning(“execution(*com.itmayi.service.UserService.add(..))”)

Public void run(){    }

//环绕通知

@Around(“execution(*com.itmayi.service.UserService.add(..))”)

Public void around(ProceedingJoinPoint proceedingJoinPoint){

System.out.println(“环绕通知之前”);

proceedingJoinPoin.proceed();

System.out.println(“环绕通知之后”);

}

这些通知的前后顺序:

环绕通知之前

前置通知

业务逻辑层

数据库访问层

运行通知

环绕通知之后

后置通知 事务管理

第九节:使用xml来配置AOP

<bean id=”aop” class=”com.itmayi.service.aop”></bean>

<aop:config>

<aop:pointcut expression=”execution(*com.itmayi.service.UserService.add(..))” id=”pt”>    //定义切入点

<aop:aspect ref=”aop”>

<aop:after method=”commit” pointcut-ref=”pt”/>  //这里是引用上面的切入点!

<aop:before method=”begin”/>   //这些是定义规则

<aop:after-throwing method=”error”/>

<aop:after-returning method=”run”/>

<aop:around method=”around”/>

</aop:config>

蚂蚁课堂学习笔记之springAop和Ioc相关推荐

  1. 计算机网络微课堂 学习笔记

    因有道云笔记转入csdn,图片无法加载,大家可进入笔记学习,链接如下: 有道云笔记地址:计算机网络微课堂 第一章 一.概述 1.1 计算机网络在信息时代的作用  计算机网络已由一种通信基础设施发展成 ...

  2. 【公司金融课堂学习笔记】1、企业融资—风险投资

    作为一个IT人,有必要学习一点公司金融课,从本节开始,分享个人学习田教授课程课程笔记. [协作网络]风险投资:简称VC(Venture Capital),风险投资是一个金融中心,是打开社会网络的抓手. ...

  3. JQuery课堂学习笔记

    版权声明:本文为博主原创文章,未经博主允许不得转载.更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/ ...

  4. 燕十八PHP公益课堂学习笔记

    <?php /**** 燕十八 公益PHP讲堂论 坛: http://www.zixue.it 微 博: http://weibo.com/Yshiba YY频道: 88354001 ****/ ...

  5. Java项目硅谷课堂学习笔记-P10-后台系统公众号部分

    P10-后台系统公众号部分 1.公众号菜单管理 1.1创建模块service_wechat 1.2引入依赖 1.3生成菜单相关代码 1.4创建启动类和配置文件 1.4.1启动类 1.4.2配置文件 1 ...

  6. 【学习笔记】SpringAOP的用法全解

    文章目录 Spring的AOP 一. Spring对AOP的实现包括以下3种方式 **什么是AspectJ?** 二.使用Spring的AOP 1.准备工作 2.尝试写一个简单的AOP demo 3. ...

  7. 今日课堂学习笔记01

    离线编辑即页面在没有网络的情况下加载完成,就像软件,如手机的一些软件在没网的情况下界面也可以布局出来. 格式化标签 <b>字体加粗标签 <i>字体斜体标签 <sub> ...

  8. 【公司金融课堂学习笔记】2、企业融资—风投如何影响企业价值

    一旦决定了要和风投合作,就意味着你将进入一场复杂而又微妙的动态博弈中.不但决定了企业的价值能不能最大化,甚至关系到企业的生死与存亡. 下面以对手.策略.时机这三个基本要素来详细拆解这场动态博弈. 选择 ...

  9. 数据分析算法-决策树(上)-课堂学习笔记

    数据分析之决策树 决策树的工作原理 决策树基本上就是把我们以前的经验总结起来,我给你准备一个打篮球的训练集.如果我们要出门打篮球,一般会根据'天气'.'温度'.'湿度'.'刮风'这几个条件来判断,最后 ...

  10. 蚂蚁课堂视频笔记思维导图-3期 一、并发编程专题

    在线地址:https://www.edrawsoft.cn/viewer/public/s/a09c4252911909 持续更新中-

最新文章

  1. css 浮动在最上层_CSS编码规范
  2. JAVA中String类的intern()方法的作用
  3. 设计模式-模版方法模式
  4. Linux启动时间的极限优化(Z)
  5. Java LineNumberReader getLineNumber()方法及示例
  6. (转)C#中的委托(Delegate)和事件(Event)
  7. linux系统支持最大内存,「Linux」- 查找系统支持的最大内存 @20210225
  8. yolo和mrcnn目标检测
  9. python实现kmeans图像分割、一只遥望大海的小狗_【Python】爬虫+ K-means 聚类分析电影海报主色...
  10. 【C语言代码写圣诞节程序】别再画圣诞树了,看都看腻了
  11. QRCode简单生成二维码
  12. python求周长_作业-python面向对象编程-计算周长和面积
  13. 论文阅读笔记 | Enemy At the Gateways:Censorship-Resilient Proxy Distribution Using Game Theory(NDSS 2019)
  14. 香港坚固金业的黑幕,属于非法投资平台。
  15. 以post的方式发请求,传参在url中
  16. t检验、方差分析、卡方检验统计量的构造
  17. Visual Basic 6.0编写简单网页浏览器
  18. 科大讯飞杯”第18届上海大学程序设计联赛(H dfs暴力) L、动物森友会 (网络流题 延伸题 E、Sunscreen)
  19. 建筑结构抗震分析之施加地震波的方法与理论机理
  20. 电子计算机技术文件检索,GB T 4967-1995_电子计算器通用技术条件_高清版_可检索.pdf-文档在线预览...

热门文章

  1. 手把手教你调用微信扫一扫,三分钟包会
  2. PDF拆分页面,免费拆分为多个PDF
  3. UTF-8 字符处理在 Web 开发中的应用
  4. java从网页上导出表格,如何从网页将表格导出到Excel
  5. 离散数学(第2版)屈婉玲版知识点小结(用于个人快速复习)-1
  6. 离散数学 (屈婉玲)集合部分 笔记
  7. 开关电源设计入门到精通系列--序
  8. 数据结构(C语言版本)
  9. 基于TCP协议的电子词典
  10. 航模入门经典教材:航空模型教材