您的位置:首页 > 编程语言 > ASP

使用AspectJ提供的注解方式实现aop

2016-04-29 01:59 721 查看
spring实现aop的方式有一下几种

1、基于代理的AOP

2、纯简单java对象切面

3、@Aspect注解形式的

4、注入形式的Aspcet切面

下面是用@aspect注解形式实现的,首先是导入一些的jar包

切面的代码

@Component
@Aspect
public class Advice {
@Before("init()")//通知
public void log(){
System.out.println("before do...");
}

@Pointcut("execution(* service.*.*(..))")//方法切入点,execution为执行的意思,*代表任意返回值,然后是包名,.*意思是包下面的所有子包。(..)代表各种方法.

public void init(){

}
}


实现类

@Component("serviceImpl")
public class ServiceImpl implements Service {

@Override
public void saySomething() {

System.out.println("do..");

}
}


spring的配置文件中添加

<context:annotation-config></context:annotation-config>
<context:component-scan base-package="service,advice"></context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>


通过aop命名空间的<aop:aspectj-autoproxy />声明自动为spring容器中那些配置@aspectJ切面的bean创建代理,织入切面。当然,spring

在内部依旧采用AnnotationAwareAspectJAutoProxyCreator进行自动代理的创建工作,但具体实现的细节已经被<aop:aspectj-autoproxy />隐藏起来了

测试代码 

public class Test {

public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ac = new ClassPathXmlApplicationContext("service/bean.xml");
Service ser =  (Service) ac.getBean("serviceImpl");
ser.saySomething();
}

}


结果就是在输出do..之前输出了before do...

实际应用中可以用来实现日志功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: