文档章节

spring aop 注解方式

杨中仁
 杨中仁
发布于 2016/10/01 23:36
字数 834
阅读 98
收藏 3

今天大概看了一下spring4的jar 看到了aop  于是看看源码写了一下用例。比较简单,适用于 初学者。

aop的意思 大概应该都懂的。不懂的 可以先百度看看。 下面直接看下简单的例子吧。

 

第一  需要在项目的maven项目下面增加aspect 。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.young</groupId>
    <artifactId>insane-conf</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>insane-dao</module>
        <module>insane-util</module>
        <module>insane-common</module>
        <module>insane-ba</module>
        <module>insane-app</module>
        <module>insane-wap</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <!-- 设置框架的版本  v -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        
        <spring.release.version>4.3.3.RELEASE</spring.release.version>
        <mybatis.version>3.3.0</mybatis.version>
        <mysql.version>5.1.26</mysql.version>
        <mybatis.spring.version>1.2.2</mybatis.spring.version>
    </properties>


    <dependencies>
        <!-- spring 框架 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.release.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>3.2.9.RELEASE</version>
        </dependency>

        <!--aop-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.6.9</version>
        </dependency>

        <!--log-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.6</version>
        </dependency>

        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>


        <!--配置阿里 数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.4</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.5</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>1.5.2.RELEASE</version>
        </dependency>

        <!-- mybatis 框架 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis.spring.version}</version>
        </dependency>

    </dependencies>

</project>

第二 定义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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">


    <!-- 使用注解 2016年09月28日23:38:24 -->
    <context:annotation-config/>

    <!-- 配置包名下面 所有的可以使用注解 注入 -->
    <context:component-scan base-package="org.young.common"></context:component-scan>

    <aop:aspectj-autoproxy/>

    <!--加载properties配置文件-->
    <!--<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">-->
        <!--<property name="locations">-->
            <!--<list>-->
                <!--<value>classpath*:jdbc.properties</value>-->
            <!--</list>-->
        <!--</property>-->
    <!--</bean>-->

    <!--加载其他的spring配置文件-->
    <!--<import resource="spring-db.xml"/>-->

</beans>

 

第三  定义一个接口和实现类 代码如下。

package org.young.common.service;

/**
 * Created by young on 16/9/28.
 */
public interface UserService {

    String say(String name);

}
package org.young.common.service.impl;

import org.springframework.stereotype.Component;
import org.young.common.service.UserService;

/**
 * Created by young on 16/9/28.
 */
@Component("userService")
public class UserServiceImpl implements UserService{


    @Override
    public String say(String name){
        System.out.println("[UserServiceImpl say] --->>> " + name);
        return "[UserServiceImpl say] --->>> " + name;
    }

}

第四  定义一个规范  也就是对于这个service包下面 前后执行的业务类

package org.young.common.aop.aspect;

/**
 * Created by young on 16/10/1.
 */
public interface MQProductAspect {
}
package org.young.common.aop.aspect.impl;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.young.common.aop.aspect.MQProductAspect;

/**
 * Created by young on 16/10/1.
 */
@Aspect
@Component
public class MQProductAspectImpl implements MQProductAspect{

    // 定义一个方法  2016年10月01日22:59:32
    @Pointcut(value = "execution ( * org.young.common.service.*.* (..))")
    public void pointcutMethod(){}

    // 在方法之前执行
    @Before(value = "pointcutMethod()")
    public void beforeMethod(){
        System.out.println("beforeMethod");
    }

    @Around(value = "pointcutMethod()")
    public Object aroundMethod(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
        System.out.println("aroundMethod begin");
        Object object = proceedingJoinPoint.proceed();
        System.out.println("aroundMethod end");
        return object;
    }

    @AfterReturning(value = "pointcutMethod()")
    public void afterRetunrningMethod(){
        System.out.println("afterRetunrningMethod ");
    }

    @AfterThrowing(value = "pointcutMethod()")
    public void afterThrowingMethod(){
        System.out.println("afterThrowingMethod ");
    }



    @After(value = "pointcutMethod()")
    public void afterMethod(){
        System.out.println("afterMethod");
    }
}

 

最后写一个类测试一下。

package org.young.common.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.young.common.service.UserService;

/**
 * Created by young on 16/10/1.
 */
public class MQProductAspectTest {

    @Test
    public void test(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/spring/spring-context.xml");
        UserService userService = (UserService) applicationContext.getBean("userService");
        userService.say("yangzhongren");
    }

}

 

 

 

com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 org.young.common.test.MQProductAspectTest
log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
aroundMethod begin
beforeMethod
[UserServiceImpl say] --->>> yangzhongren
aroundMethod end
afterMethod
afterRetunrningMethod 

Process finished with exit code 0

 

完成。

 

所有的代码  我都提交到了  

https://git.oschina.net/yangzhongren/insane.git

 

© 著作权归作者所有

共有 人打赏支持
杨中仁
粉丝 61
博文 37
码字总数 24184
作品 0
南京
程序员
私信 提问
最最简单的spring及AOP实例

一、简单的spring实现(annotation方式) bean类 测试类: 运行结果: (xml方式) bean类 xml配置文件applicationContext.xml(放在包com.hello下) 测试类: 二、注解方式实现aop(需要导入...

wangxuwei
2017/10/24
0
0
《Spring5学习》04 - 面向切面编程

一、Spring面向切面编程的基本概念 面向切面编程(即AOP):把项目中需要再多处使用的功能比如日志、安全和事务等集中到一个类中处理,而不用在每个需要用到该功能的地方显式调用。 横切关注...

老韭菜
08/19
0
0
Spring AOP 的实现方式(以日志管理为例)

Spring AOP 的实现方式(以日志管理为例) 2016年10月08日 00:13:57 阅读数:23198 在学习Spring框架的历程中,最重要的是要理解Spring的IOC和AOP了,不但要学会怎么用,最好是知道它是怎么实...

Jeam_
07/04
0
0
IOC/AOP工具 - jBeanBox

jBeanBox是一个微形但功能较齐全的IOC/AOP工具适用于JAVA7+,利用了Java的初始化块实现的Java配置代替XML。jBeanBox采用Apache License 2.0开源协议。 其他一些IOC/AOP框架的问题: 1)Sprin...

yong9981
2016/07/25
0
14
Java设计模式综合运用(动态代理+Spring AOP)

AOP设计模式通常运用在日志,校验等业务场景,本文将简单介绍基于Spring的AOP代理模式的运用。 1. 代理模式 1.1 概念 代理(Proxy)是一种提供了对目标对象另外的访问方式,即通过代理对象访问...

landy8530
10/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

基础编程题目集-7-13 日K蜡烛图

股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。以日K线为例,每天股票价格从开盘到收盘走完一天,对应一根蜡烛小图,要表示四个价格:开...

niithub
19分钟前
0
0
Jenkins window 下的安装使用

1.下载:https://jenkins.io/download/ 双击安装完毕,将自动打开浏览器: http://localhost:8080 打开对应位置的文件,将初始密钥粘贴至输入框。 第一个是 安装默认的软件;第二个是 自定义...

狼王黄师傅
21分钟前
1
0
深入解析react关于事件绑定this的四种方式

这篇文章主要介绍了详解react关于事件绑定this的四种方式,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 在react组件中,每个方...

前端攻城小牛
29分钟前
1
0
JS正则表达式

url的正则表达式:包括IP,域名(domain),ftp,二级域名,域名中的文件,域名加上端口!用户名等等信息 `function` `IsURL(str_url) {``var` `strRegex =``"^((https|http|ftp|rtsp|mm...

前端小攻略
33分钟前
1
0
shell习题_2

find /root/ceshi1/ -type f -name "*.txt"|xargs -i mv {} {}.bak find /root/ceshi1/ -type f -name "*.txt" -exec mv {} {}.bak \; 1、批量修改文件名: n1=`echo $f|sed '#.bak##'` [ro......

芬野de博客
35分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部