Spring入门Blog[七、Spring Aop的理解和简单实现]
来源:互联网 发布:word2010 mac 破解版 编辑:程序博客网 时间:2024/05/18 05:00
转自:http://blog.csdn.net/zhang6622056/article/details/7700017
1、AOP概念
所说的面向切面编程其实就是在处理一系列业务逻辑的时候这一系列动作看成一个动作集合。比如连接数据库来说:
加载驱动-----获取class--------获取连接对象-------访问数据库------查询---------操作结果
对于上面的这一系列动作我们把其中的虚线看成是一个个的切面。然后我们在虚线的位置上加入一些逻辑。哪怕是日志,这也就成就了在不知不觉中将逻辑处理加入到了相应的位置上。而形成了所谓的面向切面编程!
下面通过@Before演示Aop织入到方法之前执行一些逻辑
AOP的应用:Xml配置 这里的xml配置引入了aop的xsd语法约束。另外加入的aop的自动代理标签。请看注释<?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: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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd" > <context:annotation-config/> <!-- 配置容器资源扫描的包 --> <context:component-scan base-package="com.spring" /> <!-- 自动产生代理,内部实现是用AspectJ实现。可以使用aspectj的注解产生代理 --> <aop:aspectj-autoproxy /></beans>
加入Jar包:
1、编写被注入的方法。必须得是spring容器管理的对象
- import org.springframework.stereotype.Component;
- import com.spring.dao.UserDao;
- @Component("userService")
- public class UserServiceImpl implements UserService{
- private UserDao userDao;
- public void setUserDao(UserDao userDao) {
- this.userDao = userDao;
- }
- //在下面方法前面加逻辑
- public void HelloWorld(){
- System.out.println("helloworld");
- }
- }
2、织入方法的配置:
package com.spring.aop;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.stereotype.Component;//声明切面@Aspect//加入Spring管理容器@Component("LogInterceptor")public class LogInterceptor {//指定织入的方法。@Before("execution(public void com.spring.service.UserServiceImpl.HelloWorld())")public void BeforeMethod(){System.out.println("method start!");}}测试aop的织入:public class SpringTest {@Testpublic void test01() {BeanFactory applicationContext = new ClassPathXmlApplicationContext("beans.xml");UserService user = (UserService) applicationContext.getBean("userService");user.HelloWorld();}}
注意:
在编写过程中的织入点语法上指定before织入哪个方法的前面。而括号中的这个被指定的织入点最好是实现一个接口。如果不实现接口的话就会报异常为:
Cannot proxy target class because CGLIB2 is not available.Add CGLIB to the class path or specify proxy interfaces
这个异常的解决办法为:
加入cglib.jar。因为被织入对象的方法单位如果没有实现接口的话它就需要cglib.jar的支持。
AOP基本概念:
JoinPoint:切入点、可以理解为上面案例的HelloWorld方法之前就为一个Joinpoint
Pointcut:切入点的集合,可以通过织入点语法定义N个切入点加入逻辑处理。
Aspect:切面,指的是切面的类。也就是上面声明Aspect的逻辑集合
Advise:指的是切面上的逻辑比如@Before、@After
Target:被代理对象.上面的案例指的是UserServiceImpl
Weave:织入
- Spring入门Blog[七、Spring Aop的理解和简单实现]
- Spring入门Blog[七、Spring Aop的理解和简单实现]
- Spring AOP的理解和简单实现
- Spring AOP思想的理解和简单实现
- AOP入门的简单例子(Spring AOP实现)
- spring AOP简单理解
- Spring Aop简单理解
- 【Spring】aop的简单实现
- Spring入门Blog[九、Spring Aop 用xml的方式实现]
- Spring入门Blog[九、Spring Aop 用xml的方式实现]
- 理解Spring的AOP和Ioc/DI就这么简单
- Spring AOP 配置文件的简单理解
- Spring实现简单AOP
- Spring Aop 简单实现
- Spring框架AOP的配置和实现的简单例子
- java 关于Spring中Aop的简单理解以及SpringBoot如何添加Aop实现步骤
- spring aop的理解
- Spring AOP的理解
- 258. Add Digits
- 0027 OpenGL的安装及配置
- [Web前端]梳理-DOM.14. DOM.事件,15DOM.事件处理
- Habber - IOS XMPP 客户端 教程 (二)应用XMPP&代理&全局变量
- js 屏蔽浏览器右键菜单
- Spring入门Blog[七、Spring Aop的理解和简单实现]
- 虚拟机类加载机制
- 自己动手整合ssh
- 内存泄漏检测工具
- DialogFragment实现自定义进度条
- [Web前端]梳理-DOM.16. event对象
- 搜索栏UISearchBar和UISearchController
- Android小技巧:动态设置布局属性addRule
- linux 命令之 chacl