本文目录一览:
- 1、java切点和切面讲解,主要是干什么的,有什么作用,省代码?高效?务必通俗易懂,跪谢
- 2、java面向对象的三要素是什么
- 3、Java配置切面的几种方式你都知道吗
- 4、谁能解释一下java面向切面编程的思想 以及具体的使用方式
java切点和切面讲解,主要是干什么的,有什么作用,省代码?高效?务必通俗易懂,跪谢
切点和通知构成切面;比如现在你想在所有的save方法前加一些相同代码,那你的切点就是save前,然后通知就是你所加的代码,而这两个整体构成一个切面,当你那天突然觉得这段代码需要改一下,那你就可以直接改通知内容,结果是开发效率变高,代码量减少,耦合度降低,你可以参考声明式事务的配置方式来梳理这部分知识,会快一点
java面向对象的三要素是什么
java中的面向对象的三大基本特征,不是三要素:【封装】、【继承】、【多态】
一、封装
对象要有一个明确的边界;边界的划分(对象各司其职、对象的粒度、对象的可重用性)
具体来说:
1.属性: 私有 private(提供set和get方法)
2.方法: 公开或私有public/private
3.方法声明 -- 公开
方法实现 -- 隐藏
实现改变时,对对象的使用者没有影响。
二、继承
共性放到父类,特性放到子类;子类,父类 -- 其实就是特殊 -- 一般
1.关键字: extends 例如:Dog extends Animal{}
2.java中一个类最多只能有一个直接的父类,即单继承(具有简单性、树形结构),
C++中是单继承
java中要实现多继承,通过接口来实现。
3.父类中所有属性和方法都能继承给子类;父类中的私有方法不能继承给子类。
4.java中的访问修饰符
访问修饰符
访问权限
继承
private 本类内部 不能继承
default 本类+同包 同包子类可以继承
protected 本类+同包+不同子包 可以继承
public 公开 可以继承
5.构造对象过程
(1)分配空间
(2)递归地构造父类对象
a. 父类 初始化属性
b. 父类 构造方法
(3)初始化属性
(4)调用构造方法
6.super
用法:
super() 调用父类的构造方法,只能出现在构造方法的第一行
super.方法名 super表示父类的对象,通过它去调用父类的方法
注意:在写类的时候,一定要写默认无参的构造方法,如果一个构造方法的
第一句既不是this(),也不是super()时,那么就会在这里隐含的调用
他的父类的无参的构造方法,即隐含的有super()。
三、多态
运行时多态。
子类的对象放在父类的引用中,例如 Animal a=new Dog,子类对象当父类对象来使用。
1.多态原则:
(1)对象类型不变
(2)只能用引用调用其引用类型中定义的方法
(3)运行时,根据对象的实际类型去找子类覆盖之后的方法
例子:
有Animal类中有eat()和sleep()两个方法,sleep()中睡8小时;子类Dog中有
eat()方法,sleep()方法中睡6小时,还有wangwang()方法。
现创建Animal a=new Dog(); 不能调用a.wangwang(),调用a.sleep()输出睡6小时。
2.对象的强制转换
格式: 引用 instanceof 类型
引用所指的对象是否与类相符,返回值boolean值。
用法:
Animal a=new Cat();
if(a instanceof Dog)
{
Dog d=(Dog)a;
d.wangwang();
}
说明:如果只有Dog d=(Dog)a;运行时错误,因为a是Cat而不是Dog (多态原则第一条)
3.多态的灵活变换
(1)用于参数列表上:
public void m(A a){} 可以用A类的任何子类对象作为参数
(2)用在返回值上:
public A m(){} 这个方法可能返回A类的任何子类对象
Java配置切面的几种方式你都知道吗
演示5种方式配置文件AOP
1. bean class="cn.hncu.spring4x.aop.Cat" id="cat"/bean
!-- 切点 --
bean class="org.springframework.aop.support.JdkRegexpMethodPointcut" id="pointcut"
property name="pattern" value=".*run.*"/property
/bean
!-- 通知 ,要自己写--
bean class="cn.hncu.spring4x.aop.AroundAdvice" id="advice"/bean
!-- 切面=切点+通知 --
bean class="org.springframework.aop.support.DefaultPointcutAdvisor" id="advisor"
property name="advice" ref="advice"/property
property name="pointcut" ref="pointcut"/property
/bean
bean class="org.springframework.aop.framework.ProxyFactoryBean" id="catProxide"
property name="target" ref="cat"/property
property name="interceptorNames"
list
valueadvisor/value
/list
/property
/bean
2. bean class="cn.hncu.spring4x.aop.Cat" id="cat"/bean
!-- 切面=切点+通知 (把切点和通知写成内部bean)--
bean class="org.springframework.aop.support.DefaultPointcutAdvisor" id="advisor"
property name="advice"
bean class="cn.hncu.spring4x.aop.AroundAdvice"/bean
/property
property name="pointcut"
bean class="org.springframework.aop.support.JdkRegexpMethodPointcut"
property name="patterns"
list
value.*run.*/value
value.*say.*/value
/list
/property
/bean
/property
/bean
bean class="org.springframework.aop.framework.ProxyFactoryBean" id="catProxide"
property name="target" ref="cat"/property
property name="interceptorNames"
list
valueadvisor/value
/list
/property
/bean
3.bean class="cn.hncu.spring4x.aop.Cat" id="cat"/bean
!--//直接在切面bean中配置“切点的正则表达式”,省去“切点bean”的配置 用到这个类 org.springframework.aop.support.RegexpMethodPointcutAdvisor --
bean class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" id="advisor"
property name="advice"
bean class="cn.hncu.spring4x.aop.AroundAdvice"/bean
/property
property name="patterns"
list
value.*run.*/value
/list
/property
/bean
bean class="org.springframework.aop.framework.ProxyFactoryBean" id="catProxide"
property name="target" ref="cat"/property
property name="interceptorNames"
list
valueadvisor/value
/list
/property
/bean
4. bean class="cn.hncu.spring4x.aop.Cat" id="cat"/bean
!--//直接在切面bean中配置“切点的正则表达式”,省去“切点bean”的配置 用到这个类 org.springframework.aop.support.RegexpMethodPointcutAdvisor --
bean class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" id="advisor"
property name="advice"
bean class="cn.hncu.spring4x.aop.AroundAdvice"/bean
/property
property name="patterns"
list
value.*run.*/value
/list
/property
/bean
!-- 自动代理 --
bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/bean
5. bean class="cn.hncu.spring4x.aop.Cat" id="cat"/bean
!--//直接在切面bean中配置“切点的正则表达式”,省去“切点bean”的配置 用到这个类 org.springframework.aop.support.RegexpMethodPointcutAdvisor --
bean class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" id="advisor"
property name="advice"
bean class="cn.hncu.spring4x.aop.AroundAdvice"/bean
/property
property name="patterns"
list
value.*run.*/value
/list
/property
/bean
!-- 自动代理 --
bean class="cn.hncu.spring4x.aop.MyAutoProxy"/bean
谁能解释一下java面向切面编程的思想 以及具体的使用方式
面向切面编程(AOP),就是关注程序运行的过程,切面就是要把方法切开,分别执行前,执行中,执行后(可能更细化)等多个步骤,分别针对这三个阶段进行处理。以获得逻辑过程中各部分之间低耦合性的隔离效果。
具体使用场景:
事务管理:我们在操作数据库的时候需要在操作前打开事务,结束后提交事务(或回滚事务),按往常的编码方式,我们会在每个方法前、后都添加一些事务操作的重复的代码,使得每个类都与事务操作相耦合;而使用了AOP,代码上看上去就是直接操作的数据库,而我们通过某种机制,可让代码在你不察觉的情况下进行了事务开启和提交(或回滚),事实上Spring就提供了这种事务机制。
差不多的场景还有日志的记录