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
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
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
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
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
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 }
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 >
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 }
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 }