spring开发_Annotation_AOP_Before增强处理

项目结构:

http://www.cnblogs.com/hongten/gallery/image/112691.html

在此项目中除了要引入基本springjar包:

spring.jar和commons-logging.jar

还需要引入:

aspectjweaver.jar

aspectjrt.jar

两个jar包!!!

/spring_2000_aop_annotation/src/com/b510/app/test/SpringTest.java

 1 package com.b510.app.test;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 import com.b510.service.AnimalService;
 7 
 8 /**
 9  * 测试类
10  * 
11  * @author Hongten
12  * 
13  */
14 public class SpringTest {
15 
16     public static void main(String[] args) {
17         ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
18         AnimalService cat = (AnimalService) act.getBean("cat");
19         // 调用printResult()方法
20         cat.printResult();
21         // 调用printHobby()方法
22         cat.printHobby();
23     }
24 }

/spring_2000_aop_annotation/src/com/b510/aspect/MyBeforeAdvice.java

 1 package com.b510.aspect;
 2 
 3 import org.aspectj.lang.annotation.Aspect;
 4 import org.aspectj.lang.annotation.Before;
 5 
 6 /**
 7  * 定义一个Before增强处理类
 8  * 
 9  * @author Hongten
10  * 
11  */
12 // 定义切面
13 @Aspect
14 public class MyBeforeAdvice {
15 
16     private int i = 0;
17 
18     /**
19      * 搜索com.b510.service.impl包下的所有类及其类的方法,作为本方法的切入点(Jionpoint)
20 */
21     @Before("execution(* com.b510.service.impl.*.*(..))")
22     public void getVisits() {
23         System.out.println("自定义切面MyBeforeAdvice类的getVisits()方法的执行此数为" + (++i));
24     }
25 }

/spring_2000_aop_annotation/src/com/b510/service/AnimalService.java

 1 package com.b510.service;
 2 
 3 /**
 4  * 定义动物接口
 5  * 
 6  * @author Hongten
 7  * 
 8  */
 9 public interface AnimalService {
10     /**
11      * 打印信息
12 */
13     public void printResult();
14 
15     /**
16      * 打印兴趣爱好
17 */
18     public void printHobby();
19 }

/spring_2000_aop_annotation/src/com/b510/service/impl/CatServiceBean.java

 1 package com.b510.service.impl;
 2 
 3 import org.springframework.stereotype.Component;
 4 
 5 import com.b510.service.AnimalService;
 6 /**
 7  * 定义一个动物的实现类CatServiceBean
 8  * @author Hongten
 9  *
10  */
11 @Component
12 public class CatServiceBean implements AnimalService {
13 
14     /**
15      * 名字
16 */
17     private String name;
18     /**
19      * 兴趣爱好
20 */
21     private String hobby;
22 
23     public String getHobby() {
24         return hobby;
25     }
26 
27     public String getName() {
28         return name;
29     }
30 
31     @Override
32     public void printHobby() {
33         System.out.println("我的兴趣爱好是" + getHobby());
34     }
35 
36     @Override
37     public void printResult() {
38         System.out.println("大家好,我是" + getName());
39     }
40 
41     public void setHobby(String hobby) {
42         this.hobby = hobby;
43     }
44 
45     public void setName(String name) {
46         this.name = name;
47     }
48 }

/spring_2000_aop_annotation/src/beans.xml

要添加:

xmlns:aop="http://www.springframework.org/schema/aop"

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

请看下面:

 1 <?xml version="1.0" encoding="GBK"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:aop="http://www.springframework.org/schema/aop"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans 
 6     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 7     http://www.springframework.org/schema/context
 8     http://www.springframework.org/schema/context/spring-context-3.0.xsd
 9     http://www.springframework.org/schema/aop
10     http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
11     <context:component-scan base-package="com.b510.aspect,com.b510.service">
12         <context:include-filter type="annotation"
13             expression="org.aspectj.lang.annotation.Aspect" />
14     </context:component-scan>
15     <!-- 启动@AspectJ支持 -->
16     <aop:aspectj-autoproxy />
17     <!--
18         不适用spring的XML Shemale配置方式,可以采用如下配置 : <bean
19         class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"/>
20     -->
21 
22     <bean id="cat" class="com.b510.service.impl.CatServiceBean">
23         <property name="name" value="加菲" />
24         <property name="hobby" value="吃,喝,睡觉" />
25     </bean>
26 </beans>

运行结果:

 1 2012-3-13 20:33:46 org.springframework.context.support.AbstractApplicationContext prepareRefresh
 2 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@c1b531: display name [org.springframework.context.support.ClassPathXmlApplicationContext@c1b531]; startup date [Tue Mar 13 20:33:46 CST 2012]; root of context hierarchy
 3 2012-3-13 20:33:46 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
 4 信息: Loading XML bean definitions from class path resource [beans.xml]
 5 2012-3-13 20:33:56 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
 6 信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@c1b531]: org.springframework.beans.factory.support.DefaultListableBeanFactory@12a3722
 7 2012-3-13 20:33:56 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
 8 信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@12a3722: defining beans [myBeforeAdvice,catServiceBean,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.aop.config.internalAutoProxyCreator,cat]; root of factory hierarchy
 9 自定义切面MyBeforeAdvice类的getVisits()方法的执行此数为1
10 大家好,我是加菲
11 自定义切面MyBeforeAdvice类的getVisits()方法的执行此数为2
12 我的兴趣爱好是吃,喝,睡觉

总结:每次运行的时候,都要等上12秒钟左右,有结果可以看出,Before增强处理的运行方式:

@Before("execution(* com.b510.service.impl.*.*(..))")

搜索com.b510.service.impl包下的所有类及其类的方法,作为本方法的切入点(Jionpoint)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SeanCheney的专栏

《利用Python进行数据分析·第2版》第6章 数据加载、存储与文件格式6.1 读写文本格式的数据6.2 二进制数据格式6.3 Web APIs交互6.4 数据库交互6.5 总结

访问数据是使用本书所介绍的这些工具的第一步。我会着重介绍pandas的数据输入与输出,虽然别的库中也有不少以此为目的的工具。 输入输出通常可以划分为几个大类:读...

5806
来自专栏数据结构与算法

BZOJ1269: [AHOI2006]文本编辑器editor

Descriptio 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器。你能帮助他吗? 为了明确任务目标,可可对“文本编辑器...

2907
来自专栏FreeBuf

浅析ReDoS的原理与实践

*本文原创作者:MyKings,本文属FreeBuf原创奖励计划,未经许可禁止转载 ReDoS(Regular expression Denial of Ser...

8155
来自专栏Java帮帮-微信公众号-技术文章全总结

【选择题】Java基础测试题一(10道)

【选择题】Java基础测试题一(10道) 1.下面哪些是合法的变量名? (DEG) A.2variable //不能以数字开头 ...

4658
来自专栏程序员的SOD蜜

.net访问PostgreSQL数据库发生“找不到函数名”的问题追踪

    PostgreSQL是一个使用广泛的免费开源的数据库,与MySQL比较,它更适合复杂的企业计算任务,而MySQL在互联网领域应用更为广泛,究其原因,可能...

3697
来自专栏大内老A

.NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?

物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON、XML和INI,对应的配置源类型分别是JsonConfiguratio...

1925
来自专栏令仔很忙

观察者模式和Spring的结合

这周给分了一个任务,就是对查询回来的数据进行各种各样的过滤,有七种不同的过滤条件。过滤条件是在数据库中存着的。在我们项目中有一个热发,就是定时的从数据库中把数...

1452
来自专栏一英里广度一英寸深度的学习

Spring 基础

interface声明接口,接口中的函数不用public/private,但是要匹配参数和异常。

1021
来自专栏一个会写诗的程序员的博客

《Kotlin 程序设计》第七章 Kotlin 编译过程分析第七章 Kotlin 编译过程分析

http://mp.weixin.qq.com/s/lEFRH523W7aNWUO1QE6ULQ

1892
来自专栏程序猿DD

Spring框架中的设计模式(二)

在 上一篇 中我们在Spring中所谈到的设计模式涉及到了创建模式三剑客和1个行为模式(解释器模式)。这次我们会将眼光更多地关注在具有结构性和行为性的设计模式上...

4198

扫码关注云+社区

领取腾讯云代金券