什么是aop思想?
首先老办法我们一起先看看官网是咋描述的?
它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。
用通俗易懂的话说aop思想就是指 “纵向重复,横向抽取”
画个图我们来解释一下吧

如上图,过滤器1=过滤器2=过滤器3 =过滤器。代码重复严重,我们就把重复的代码拿出来,放到一个通知里,如果我们需要的话就调用他。这样达到了快捷简单有效的方法。
Spring着手搭建aop
首先引入我们的jar包

https://download.youkuaiyun.com/download/qq_36622149/10638299
接下来我们再学习一下aop的黑话(名词介绍):

接下来我们就需要开始准备我们的advice和point cut 对象了。这些名词的意思若看不懂请看下图,每一个颜色的框框代表其中指向的代码


如果大家对本帖有什么疑问欢迎加入我们的交流群共同探讨 欢迎加入外包项目交流群,群聊号码:698466938
下面我们需要着手准备两个对象,一个是接口对象(本例用的是userservice),另一个是通知对象,也就是advice。

转载请保留原贴地址,https://blog.youkuaiyun.com/qq_36622149/article/details/82258210谢谢。
@Repository("userservice")
public class UserservierImpl implements UserService {
@Override
public void savedata() {
System.out.println("这里是需要增强的代码,因为如果保存我,需要打开事务才可以。");
}
}

@Component("myadvice")
public class Myadvice {
public void before () {
System.out.println("这里是增强的代码,也就是重复代码。(打开事务)");
}
}

转载请保留原贴地址,https://blog.youkuaiyun.com/qq_36622149/article/details/82258210谢谢。
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd ">
<context:component-scan base-package="cn.tsu"></context:component-scan>
<aop:config>
<aop:pointcut expression="execution(* cn.tsu.serviceImpl.*servierImpl.*(..))" id="es"/>
<aop:aspect ref="myadvice">
<aop:before method="before" pointcut-ref="es"/>
</aop:aspect>
</aop:config>
</beans>
最后再发一下Demo的junit测试。
@RunWith(SpringJUnit4ClassRunner.class) //使用junit4直接创建aoolication容器,不需要自己创建了
//相当于ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
@ContextConfiguration("classpath:applicationContext.xml")
public class AopDemo {
@Resource(name="userservice") //相当于注入内容userservice us = (Userservice) ac.getBean("userservice");
public UserService us; //这里是接口父类,不是impl。 直接注入内容
@Test
public void test() {
us.savedata();
}
}
运行结果:

这里除了before方法,还有其他方法,一共有5种方法,大家有兴趣的可以自己再百度测试一下。如果大家对本帖有什么疑问欢迎加入我们的交流群共同探讨 欢迎加入外包项目交流群,群聊号码:698466938。
转载请保留原贴地址,https://blog.youkuaiyun.com/qq_36622149/article/details/82258210谢谢。
如果大家对本帖有什么疑问欢迎加入我们的交流群共同探讨 欢迎加入外包项目交流群,群聊号码:698466938。

1881

被折叠的 条评论
为什么被折叠?



