Spring中实现AOP

AspectJ介绍:

AspectJ是一个面向切面的框架,它扩展了Java语言。

AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件.

Spring 可以使用了和AspectJ 5一样的注解,并使用AspectJ来做切入点解析和匹配。

但是,AOP在运行时仍旧是纯的Spring AOP,并不依赖于AspectJ的编译器或者织入器(weaver)。

aspectJ下载:http://www.eclipse.org/aspectj/downloads.php

 

采用AspectJ声明实现AOP:

接口UserManager.java:


  
1 package com.springdemo.manager;
2
3   public interface UserManager {
4 public void add(String name,String password);
5 public void delete(String name);
6 public int count();
7 }
8  

类UserManagerImpl.java:

代码

   
1 package com.springdemo.manager;
2
3
4   public class UserManagerImpl implements UserManager {
5
6 public void add(String name, String password) {
7 System.out.println( " do add user ... " );
8 }
9
10 public void delete(String name) {
11 System.out.println( " do delete user ... " );
12 }
13
14 public int count() {
15 return 10 ;
16 }
17 }
18  

切面UserManagerHandler.java:

代码

   
1 package com.springdemo.manager;
2
3   import org.aspectj.lang.annotation.Aspect;
4   import org.aspectj.lang.annotation.Before;
5   import org.aspectj.lang.annotation.Pointcut;
6
7 @Aspect
8   public class UserManagerHandler {
9
10 /**
11 * PointCut名,不能有返回值
12 */
13 @Pointcut( " execution(* *.*(..)) " )
14 public void pointCutMethods(){}
15
16 /**
17 * 定义Advice
18 */
19 @Before( " pointCutMethods() " )
20 public void checkPower() {
21 System.out.println( " check manager power .... " );
22 }
23 }
24  

bean.xml:

代码

   
1 < beans xmlns = " http://www.springframework.org/schema/beans "
2 xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance " xmlns:context = " http://www.springframework.org/schema/context "
3 xmlns:util = " http://www.springframework.org/schema/util "
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/util
10 http: // www.springframework.org/schema/util/spring-util-3.0.xsd
11 http: // www.springframework.org/schema/aop
12 http: // www.springframework.org/schema/aop/spring-aop-3.0.xsd">
13
14
15 < aop:aspectj - autoproxy />
16 < bean id = " UserManagerHandler " class = " com.springdemo.manager.UserManagerHandler " />
17 < bean id = " UserManagerImpl " class = " com.springdemo.manager.UserManagerImpl " />
18 </ beans >
19

测试代码:

代码

   
1 package com.springdemo.client;
2
3 import org.springframework.beans.factory.BeanFactory;
4 import org.springframework.context.support.ClassPathXmlApplicationContext;
5 import com.springdemo.manager.UserManager;
6
7 public class Client {
8 public static void main(String[] args) {
9 // Resource res = new ClassPathResource("bean.xml");
10 // BeanFactory fac = new XmlBeanFactory(res);
11 BeanFactory fac = new ClassPathXmlApplicationContext( " bean.xml " );
12 UserManager userManager = (UserManager)fac.getBean( " UserManagerImpl " );
13 userManager.add( " pxl.. " , " pwd.. " );
14 }
15
16 }
17

基于Schema的AOP实现:

UserManager.java 和 UserManagerImpl.java 代码同上。

 

切面UserManagerHandler.java:


  
1 package com.springdemo.manager;
2   public class UserManagerHandler {
3 public void checkPower() {
4 System.out.println( " check manager power .... " );
5 }
6 }
 

配置Spring容器bean.xml:

代码

   
1 < beans xmlns = " http://www.springframework.org/schema/beans "
2 xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance " xmlns:context = " http://www.springframework.org/schema/context "
3 xmlns:util = " http://www.springframework.org/schema/util "
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/util
10   http: // www.springframework.org/schema/util/spring-util-3.0.xsd
11 http: // www.springframework.org/schema/aop
12 http: // www.springframework.org/schema/aop/spring-aop-3.0.xsd">
13
14 < bean id = " UserManagerHandler " class = " com.springdemo.manager.UserManagerHandler " />
15 < bean id = " UserManagerImpl " class = " com.springdemo.manager.UserManagerImpl " />
16
17 < aop:config >
18 < aop:aspect id = " UserMangerAspect " ref = " UserManagerHandler " >
19 < aop:pointcut expression = " execution(* *.*(..)) " id = " pointCutMethods " />
20 < aop:before method = " checkPower " pointcut - ref = " pointCutMethods " />
21 </ aop:aspect >
22 </ aop:config >
23 </ beans >

测试代码:

代码

   
1 package com.springdemo.client;
2
3 import org.springframework.beans.factory.BeanFactory;
4 import org.springframework.context.support.ClassPathXmlApplicationContext;
5
6 import com.springdemo.manager.UserManager;
7
8 public class Client {
9 public static void main(String[] args) {
10 // Resource res = new ClassPathResource("bean.xml");
11 // BeanFactory fac = new XmlBeanFactory(res);
12 BeanFactory fac = new ClassPathXmlApplicationContext( " bean.xml " );
13 UserManager userManager = (UserManager)fac.getBean( " UserManagerImpl " );
14 userManager.add( " pxl.. " , " pwd.. " );
15 }
16
17 }

 

转载于:https://www.cnblogs.com/pengxl/archive/2010/12/24/1916096.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值