AOP采用Annotation声明方式
来源:互联网 发布:之知为知之不知为不知 编辑:程序博客网 时间:2024/06/06 04:17
AOP主要概念
**Cross Cutting Concern
是一种独立服务,它会遍布在系统的处理流程之中
**Aspect
对横切性关注点的模块化
**Advice
对横切性关注点的具体实现
**Pointcut(切入点)
它定义了Advice应用到哪些JoinPoint上,对Spring来说是方法调用、
**JoinPoint(连接点)
Advice在应用程序上执行的点或时机,Spring只支持方法的JoinPoint,这个点也可以使属性修改,如:Aspecj可以支持
**Weave(织入)
将Advice应用到Target Object上的过程叫织入,Spring支持的是动态织入
**Target Objec(目标)
Advice被应用的对象
**Proxy(代理)
Spring AOP默认使用JDK的动态代理,它的代理是运行时创建,也可以使用CGLIB代理
**Introduction
可以动态的为类添加方法
采用Annotation声明方式
引入jar包
* spring.jar
* log4j-1.2.14.jar
* commons-logging.jar
* aspectj/*.jar
建立userManger接口
package com.bjpowernode.spring;public interface UserManager { public void addUser(String username, String password); public void delUser(int userId); public String findUserById(int userId); public void modifyUser(int userId, String username, String password);}
建立 UserManagerImpl
package com.bjpowernode.spring;public class UserManagerImpl implements UserManager { public void addUser(String username, String password) { //checkSecurity(); System.out.println("---------UserManagerImpl.add()--------"); } public void delUser(int userId) { //checkSecurity(); System.out.println("---------UserManagerImpl.delUser()--------"); } public String findUserById(int userId) { //checkSecurity(); System.out.println("---------UserManagerImpl.findUserById()--------"); return "张三"; } public void modifyUser(int userId, String username, String password) { //checkSecurity(); System.out.println("---------UserManagerImpl.modifyUser()--------"); }// private void checkSecurity() {// System.out.println("-------checkSecurity-------");// }}
SecurityHandler
import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;@Aspectpublic class SecurityHandler { /** * 定义Pointcut,Pointcut的名称为addAddMethod(),此方法没有返回值和参数 * 该方法就是一个标识,不进行调用 */ @Pointcut("execution(* add*(..))") private void addAddMethod(){}; /** * 定义Advice,表示我们的Advice应用到哪些Pointcut订阅的Joinpoint上 */ @Before("addAddMethod()") //@After("addAddMethod()") private void checkSecurity() { System.out.println("-------checkSecurity-------"); } }
applicationContext.xml
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!-- 启用AspectJ对Annotation的支持 --> <aop:aspectj-autoproxy/> <!-- 目标类 --> <bean id="userManager" class="com.bjpowernode.spring.UserManagerImpl"/> <!-- 切面 --> <bean id="securityHandler" class="com.bjpowernode.spring.SecurityHandler"/></beans>
Client
public class Client { public static void main(String[] args) { BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); //从Spring容器中获得 UserManager userManager = (UserManager)factory.getBean("userManager"); //执行 userManager.addUser("张三", "123"); }}
阅读全文
0 0
- AOP采用Annotation声明方式
- 采用Annotation方式实现AOP
- Spring---->采用Annotation的方式实现AOP
- spring对AOP的支持(采用Annotation方式)
- spring对AOP的支持(采用Annotation的方式)
- 采用annotation的方式配置Spring的IOC和AOP/采用XML的方式配置Spring的IOC和AOP
- Annotation方式实现AOP
- Spring之AOP声明式事务管理(采用xml的配置方式更好)
- spring AOP(通过annotation方式)
- Spring之AOP Annotation方式
- Spring之AOP Annotation方式
- annotation方式实现spring aop
- 采用AOP配置方式的AOP实现
- AOP示例-xml方式与annotation方式
- Spring AOP之Annotation实现方式
- spring AOP annotation方式(静态配置)
- 利用Annotation方式实现AOP编程
- Spring AOP IOC 的 Annotation 实现方式
- Redis持久化介绍
- vue-resource 踩坑记
- Java NIO学习(三)Selector监听事件+NIO服务器实例
- 小白笔记----------------leetcode 58. Length of Last Word
- Codeforces Round #339 (Div. 2)C. Peter and Snow Blower(几何模板)
- AOP采用Annotation声明方式
- linux基本权限--权限对文件,目录作用说明
- 线程
- POJ 2187 Beauty Contest(凸包,旋转卡壳)
- 18、数的子结构
- C++向外传值
- RealtiveLayout布局中设置控件layout_above属性的注意事项
- 1万小时定律是误导大众!扎克伯格等人热捧的5小时定律才是成功关键!
- d3之读文件