欢迎光临散文网 会员登陆 & 注册

Spring框架:面向切面编程,切点等面试时常问的术语,aop: before,aop:aspect等标签

2021-03-18 16:58 作者:诗书画唱  | 我要投稿

导航:

边看教程边记录的部分

面试时常用的术语

切点的理解(pointcut)

<aop: before>

<aop: after>

aop:after-throwing 

aop:before等相关标签的面向切面的运用例子

aop:aspect等标签来模拟黑客抓,拦截用户更新数据的游戏数据包的例子

5、SPRINGCORE框架_面向切面编程.ppt

aop:aspect

单词:aspect方面



边看教程边记录的部分 START



在访问界面的时候,不可以直接的访问,要进行安全验证,确认是登录了的用户后才可以访问界面,没登录就想访问就是非法访问,就是没登录的就要跳到登录界面。


在访问界面的时候,不可以直接的访问,要进行安全验证,确认是登录了的用户后才可以访问界面,没登录就想访问就是非法访问,就是没登录的就要跳到登录界面。



其实我认为spring框架,面向切面编程等的作用就是“集中处理会常要修改的内容,比如一些数据,在配置文件用value赋值,要改数据时,改value等的值就可以”。切面是一种“类”。有时集中处理就效率更高了,省去找分散的部分。如果不用Spring框架等等,还可能遗漏处理。



其实我认为spring框架,面向切面编程等的作用就是“集中处理会常要修改的内容,比如一些数据,在配置文件用value赋值,要改数据时,改value等的值就可以”。切面是一种“类”。有时集中处理就效率更高了,省去找分散的部分。如果不用Spring框架等等,还可能遗漏处理。



如果是每个步骤都用日志文件打印,那么出问题后,看日志文件就可以更快地知道错在哪里。


如果是每个步骤都用日志文件打印,那么出问题后,看日志文件就可以更快地知道错在哪里。




面试时常用的术语。

面试时常用的术语


切点的理解(pointcut)。

切点的理解。

可以看出了如果有更多类似考试,创业等的方法调用,但是要对应地在调用这些方法等前或后调用鼓励方法,使用原始地调用方法地话就会要重复用代码调用鼓励的方法。

这时候spring框架的作用就体现出了:使用面向切面,配置文件配置后可以减少代码重复。

其实我发现和认为很多强大和先进的技术(比如一些框架)的话常用的作用之一就是:减少代码重复,像是是使用了“乘法结合律”。

可以看出了如果有更多类似考试,创业等的方法调用,但是要对应地在调用这些方法等前或后调用鼓励方法,使用原始地调用方法地话就会要重复用代码调用鼓励的方法。

这时候spring框架的作用就体现出了:使用面向切面,配置文件配置后可以减少代码重复。

其实我发现和认为很多强大和先进的技术(比如一些框架)的话常用的作用之一就是:减少代码重复,像是是使用了“乘法结合律”。

execution:执行

core:核心部分

配置文件中声明切面的方法(在事务提交处理等中切面会常用,且其关键作用,所以很重要):



<aop: before>等等是spring框架中的“通知”的一种。

个人理解:本质作用就是用对应的标签来控制成自己规定的“何时,何处”来调用一些自己创建的并且为method中的值的方法。

关于<aop: before>标签的代码的意思就是,在调用Student这个类中的exam方法之前(before),会调用在method中声明的encourage方法。



关于<aop: before>标签的代码的意思就是,在调用Student这个类中的exam方法之前(before),会调用在method中声明的encourage方法。

同理的话,关于<aop: after>标签的代码的意思就是在调用Student这个类中的createWork方法之后(after),会调用在method中声明的encourage方法。

同理的话,关于<aop: after>标签的代码的意思就是在调用Student这个类中的createWork方法之后(after),会调用在method中声明的encourage方法。
用args传参





边看教程边记录的部分 END



aop:before等相关标签的面向切面的运用例子 START




package com.SSHC.bean;


public class Student {

    public void exam(){

    System.out.println("正在考试,调用Student的exam方法。");

    }

    

    public void createWork(){

    System.out.println("正在创业,调用Student的createWork方法。");

    }

    

    public void driverExam(){

    System.out.println("驾照考试,调用Student的driverExam方法,"

+ "\n int i = 1 / 0的异常来模拟驾照考试失败。");

    int i = 1 / 0;

    }

}

package com.SSHC.bean;


public class Teacher {

    public void encourage(){

    System.out.println("奥里给,加油,"

    + "调用了Teacher类中的encourage鼓励方法 ");

    }

}

package MainText;


import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;


import com.SSHC.bean.Game;

import com.SSHC.bean.Student;


public class Demo {


public static void main(String[] args) {

// TODO Auto-generated method stub

        ApplicationContext ctx = 

new ClassPathXmlApplicationContext("applicationContext.xml");

        Student s = (Student) ctx.getBean("s");

        //模拟考试前鼓励:

        s.exam();

        //模拟创业失败后鼓励:

        s.createWork();

        

        

        //模拟考驾照科目三没过后给鼓励:

        s.driverExam();

        

        

}


}


<?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"

xmlns:tx="http://www.springframework.org/schema/tx" 

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:/org/springframework/beans/factory/xml/spring-beans-3.0.xsd

       http://www.springframework.org/schema/aop classpath:/org/springframework/aop/config/spring-aop-3.0.xsd

       http://www.springframework.org/schema/tx classpath:/org/springframework/transaction/config/spring-tx-3.0.xsd

       http://www.springframework.org/schema/context classpath:/org/springframework/context/config/spring-context-3.0.xsd">

    <bean id="s" class="com.SSHC.bean.Student"></bean>

    <bean id="t" class="com.SSHC.bean.Teacher"></bean>

    

    <bean id="game" class="com.SSHC.bean.Game"></bean>

    <bean id="hk" class="com.SSHC.bean.Hacker"></bean>

    <!-- 切面配置 -->

    <aop:config>

        <aop:aspect ref="t">

            <aop:before pointcut="execution(* com.SSHC.bean.Student.exam(..))"

                method="encourage"></aop:before>

            <aop:after pointcut="execution(* com.SSHC.bean.Student.createWork(..))"

                method="encourage"></aop:after>

            <aop:after-throwing pointcut="execution(* com.SSHC.bean.Student.driverExam(..))"

                method="encourage"></aop:after-throwing>

        </aop:aspect>

        <aop:aspect ref="hk">

            <aop:before pointcut="execution(* com.SSHC.bean.Game.sendData(String)) and args(data)"

                method="interData"></aop:before>

        </aop:aspect>

    </aop:config>

</beans>





aop:before等相关标签的面向切面的运用例子END


aop:aspect等标签来模拟黑客抓,拦截用户更新数据的游戏数据包的例子 START

package com.SSHC.bean;


public class Game {

//发送游戏数据包

    public void sendData(String msg){

    System.out.println("发送到服务器的数据是:" + msg);

    }

}

package com.SSHC.bean;


public class Hacker {

//拦截数据

    public void interData(String data){

    System.out.println("拦截到的数据是:" + data);

    }

}

代码等见前面的例子,前面的例子里有记录


package MainText;


import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;


import com.SSHC.bean.Game;


public class Demo2 {


public static void main(String[] args) {

// TODO Auto-generated method stub

        ApplicationContext ctx = 

new ClassPathXmlApplicationContext("applicationContext.xml");

        //Student s = (Student) ctx.getBean("s");

        //考试前鼓励

        //s.exam();

        //创业失败后鼓励

        //s.createWork();

        //考驾照科目三没过

        //s.driverExam();

        

        Game g = (Game) ctx.getBean("game");

        g.sendData("对BOSS造成了1000点的伤害");

}


}



aop:aspect等标签来模拟黑客抓,拦截用户更新数据的游戏数据包的例子 END

5、SPRINGCORE框架_面向切面编程.ppt START



SPRINGCORE框架

面向切面编程


概念的引入

思考以下的几种情形: 1、如何在javaweb项目中实现用户的安全验证。 2、在javaweb中处理中文乱码问题。 3、在系统工程中,对每步操作都产生日志记录。 4、对每个service类中的方法调用前都启动一个事务,调用后提交或者回滚事务。 在上面的情形中,分布于应用中多处的功能被称为横切关注点。通常,这些横切关注点从概念上是与应用的业务逻辑分离的,但是往往又直接嵌入到应用的业务逻辑中,面向切面编程(AOP)的目的就是将这些横切关注点与业务逻辑分离。

什么是面向切面编程

横切关注点可以理解为在工程需要多次使用的功能。如前面所述的4种情形,全部都是横切关注点。 下图展示了一个多模块的应用,每个模块都有自己的核心功能,但是这些模块也需要一些辅助功能,例如安全验证和事务管理,这些辅助功能就是横切关注点,如果将每个横切关注点模块化为特殊类,则这些类就被称为切面。 面向切面编程的好处: 1、每个横切关注点现在被集中处理了,不会再分散到多处代码中。 2、service类更加的简洁,因为它们现在只需要关注核心功能的代码,而辅助功能的代码被转移到切面中去了。

面向切面编程的术语

描述切面的常用术语有:通知(advice),切点(pointcut)和连接点(join point)。 通知:定义了切面是什么以及何时使用,即描述了切面要完成的工作以及什么时候执行这个工作。spring中包含5种类型的通知。 1、Before,在方法被调用之前调用通知。 2、After,在方法被调用之后调用通知。 3、After-returning,在方法成功执行之后调用通知。 4、After-throwing,在方法抛出异常后调用通知。 5、Around,通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。 连接点:应用通知的时机被称为连接点。连接点可以是调用方法时、抛出异常时、甚至修改一个字段时。在spring中连接点总是方法调用时。 切点:如果通知定义了切面的“什么”和“何时”,那么切点就定义了“何处”。也可以理解为被筛选后需要被通知的连接点。 切面:即通知与切点的结合,即定义切面的全部内容:它是什么,在何时何处完成其功能。 织入:将切面应用到目标对象来创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。

Spring中的AOP支持

Spring提供了4种AOP支持: ●基于代理的经典AOP ●@AspectJ注解驱动的切面 ●纯POJO切面 ●注入式AspectJ切面(适合Spring各版本) 注意:Spring只支持方法连接点

AspectJ的切点表达式语言

在Spring AOP中,需要使用AspectJ的切点表达式语言来定义切点。下表列出了Spring AOP所支持的AspectJ切点指示器。

在配置文件中声明切面(一)

在Spring AOP的配置元素如下表

在配置文件中声明切面(二)

检查applicationContext.xml的beans标签中是否有以下的代码。

xmlns:aop="http://www.springframework.org/schema/aop"

http://www.springframework.org/schema/aop

classpath:/org/springframework/aop/config/spring-aop-4.1.xsd

在配置文件中声明切面(三)

1、创建Teacher类和Student类。

在配置文件中声明切面(三)

2、在配置文件中声明切面。

为通知传递参数

有时候通知不仅仅是对方法的简单包装,还需要校验传递给方法的参数值,为通知传递参数就比较有用了。下面看看如何为通知传递参数。创建一个模拟黑客截取游戏数据包的程序。 1、创建Game类和Hacker类。

为通知传递参数

2、配置application.xml文件。

3、进行测试。




5、SPRINGCORE框架_面向切面编程.ppt END


Spring框架:面向切面编程,切点等面试时常问的术语,aop: before,aop:aspect等标签的评论 (共 条)

分享到微博请遵守国家法律