zoukankan      html  css  js  c++  java
  • 菜鸟学习Spring——60s使用annotation实现简单AOP

    一、概述。
          AOP大家都知道切面编程,在Spring中annotation可以实现简单的AOP列子。下面还未大家介绍几个概念:
    Aspect
    对横切性关注点的模块化。
    Advice
    对横切性关注点的具体实现。
    Pointcut
    它定义了Advice应用到哪些JoinPoint上,对Spring来说是方法调用。
    JoinPoint
    Advice在应用程序上执行的点或时机,Spring只支持方法的JoinPoint,这个点也可以使属性修改,如:Aspecj可以支持。
    Weave
    将Advice应用到Target Object上的过程叫织入,Spring支持的是动态织入。
    Target Object
    Advice被应用的对象。
    Proxy
    Spring AOP默认使用JDK的动态代理,它的代理是运行时创建,也可以使用CGLIB代理。
    二、代码演示。
          为了实现使用annotation实现简单AOP我们还得加入下面几个包:
          SPRING_HOME/lib/aspectj/*.jar

    目录结构:


    UserManager.java和UserManagerImpl.java代码参照

    http://blog.csdn.net/gwblue/article/details/39668211

    中的UserManager.java和方法二的UserManagerImpl.java

    SecurityHandler.java

    	package com.tgb.spring;
    	
    	import org.aspectj.lang.annotation.Aspect;
    	import org.aspectj.lang.annotation.Before;
    	import org.aspectj.lang.annotation.Pointcut;
    	
    	@Aspect
    	public class SecurityHandler{
    		/**
    		*确定需要使用checkSecurity使用方法的范围
    		*/
    		@Pointcut("execution(* add*(..))")
    		private void addAddMethod(){}
    		/**
    		*Before是指在执行方法之前运行
    		*After是只在执行方法之后运行
    		*/
    		@Before("addAddMethod()")
    		private void checkSecurity(){
    			System.out.println("checkSecurity");
    	
    		}
    	
    	
    	}
    


    Client.java

    	package com.tgb.spring;
    	
    	import org.springframework.beans.factory.BeanFactory;
    	import org.springframework.context.support.ClassPathXmlApplicationContext;
    	
    	import com.tgb.spring.UserManager;
    	
    	
    	
    	public class Client {
    	
    		public static void main(String[] args) {
    			BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");
    			UserManager userManager=(UserManager) factory.getBean("userManager");
    			userManager.addUser("张三", "123");
    			userManager.delUser(1);
    		}
    	}
    


    applcationContext.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 -->
    	<aop:aspectj-autoproxy/>
    	
    	<bean id="userManager" class="com.tgb.spring.UserManagerImpl" />
    	<bean id="securityHandler" class="com.tgb.spring.SecurityHandler"/>
    	</beans>
    


    效果图:


    三、综述。

          利用annotation方式简单的实现了AOP,注解是一种侵入性比较强的AOP实现方式,它的优点是让开发者更加方便的使用AOP。

  • 相关阅读:
    C语言函数qsort的使用方法
    成绩打分
    distance.c
    留学生题目
    6大排序算法比较
    小游戏得分[石头剪刀布]
    二叉排序树算法
    头文件相关
    小型考试系统
    小题目【链表1】
  • 原文地址:https://www.cnblogs.com/iplus/p/4490369.html
Copyright © 2011-2022 走看看