文档章节

spring aop 注解方式

杨中仁
 杨中仁
发布于 2016/10/01 23:36
字数 834
阅读 97
收藏 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

 

© 著作权归作者所有

共有 人打赏支持
杨中仁
粉丝 60
博文 36
码字总数 23334
作品 0
南京
程序员
最最简单的spring及AOP实例

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

wangxuwei
2017/10/24
0
0
Spring AOP 的实现方式(以日志管理为例)

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

Jeam_
07/04
0
0
《Spring5学习》04 - 面向切面编程

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

老韭菜
08/19
0
0
Spring 声明式注解事务实现机制

Spring中注解事务实现机制 在使用@Transactional 注解管理事务时步骤很简单。但是如果对@Transactional理解不够透彻,很容易出现事务不起作用的情况。所以,在对@Transactional的实现机制要有...

狂奔的熊二
09/21
0
0
Spring AOP 对Spring MVC的Controller切面拦截不起作用

当使用Spring AOP对Controller层的Controller类的方法进行切面拦截,不起作用。AOP配置没有任何问题。 Spring AOP配置没有任何问题;【正常】 断点调试:Spring源码断点调试,在调用Control...

陶邦仁
2015/11/02
0
2

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
7
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
3
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
18
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部