码迷,mamicode.com
首页 > 编程语言 > 详细

十二.Spring AOP面向切面编程

时间:2018-03-05 20:49:08      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:编写   xmla   xmlns   java   express   spring   pack   mod   .com   

什么是AOP?

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

 

AOP的第一个案例

要求:使用AOP实现日志记录功能,核心模块和增强单独开发,运行时组装

1.创建接口HelloDao、HelloService、

   创建接口类HelloDaoImpl、HelloServiceImpl并实现dao层接口

public interface IHolleDao {
    public void print();
}  



public class IHolleDaoImpl implements IHolleDao {
    public void print() {
        System.out.println("数据写入成功");
    }
}



public interface HolleService {
    public void print();
}



public class HolleServiceImpl implements HolleService {

    IHolleDao dao;
    //封装属性
    public IHolleDao getDao() {
        return dao;
    }

    public void setDao(IHolleDao dao) {
        this.dao = dao;
    }

    //重写print方法
    public void print() {
        dao.print();
    }
}

2.创建前后置增强类

前置增强需实现MethodBeforeAdvice接口并实现before方法

后置增强需实现AfterReturningAdvice接口实现afterReturning方法

package cn.happy.day03aop.aop;

import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

/**
 * Created by Administrator on 2018/3/5.
 */
//前置增强
public class LoggerBefore implements MethodBeforeAdvice {
    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("记录日志");
    }
}


------------------------------------------------------------------

package cn.happy.day03aop.aop;

import org.springframework.aop.AfterReturningAdvice;

import java.lang.reflect.Method;

/**
 * Created by Administrator on 2018/3/5.
 */
//后置增强
public class LoggerAfter implements AfterReturningAdvice {
    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
        System.out.println("关闭");
    }
}

3.配置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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <bean id="dao" class="cn.happy.day03aop.dao.IHolleDaoImpl">
    </bean>

    <bean id="service" class="cn.happy.day03aop.service.HolleServiceImpl">
        <property name="dao" ref="dao"></property>
    </bean>

    <!--配置aop-->

    <bean id="Before" class="cn.happy.day03aop.aop.LoggerBefore">
    </bean>

    <bean id="After" class="cn.happy.day03aop.aop.LoggerAfter">
    </bean>

    <aop:config>
        <aop:pointcut id="mypoint" expression="execution(* *..service.*.*(..))"/>
        <!--前置增强-->
        <aop:advisor advice-ref="Before" pointcut-ref="mypoint"/>
        <!--后置增强-->
        <aop:advisor advice-ref="After" pointcut-ref="mypoint"/>
    </aop:config>

</beans>

execution(【modifiers-pattern?】 访问修饰符
ret-type-pattern 返回值类型
【declaring-type-pattern?】 全限定性类名
name-pattern(param-pattern) 方法名(参数名) 包名.类型名.方法名
【throws-pattern?】) 抛出异常类型

【】内表示可以省略

*代表0或任意多个字符

..代表方法内任意多个参数

 

4.编写测试类

@Test
    public void Spring(){
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext-day03aop.xml");
        HolleService service=(HolleService)ctx.getBean("service");
        service.print();
    }  

测试结果

技术分享图片

 

分享完毕!

十二.Spring AOP面向切面编程

标签:编写   xmla   xmlns   java   express   spring   pack   mod   .com   

原文地址:https://www.cnblogs.com/xuchangqi1/p/8510832.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!