annotation方式实现spring aop
2016-12-12 09:37
155 查看
AOP 面向切面编程
AOP编程其实是很简单的事情,纵观AOP编程,程序员只需要参与三个部分:
1、定义普通业务组件
2、定义切入点,一个切入点可能横切多个业务组件
3、定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作
所以进行AOP编程的关键就是定义切入点和定义增强处理,一旦定义了合适的切入点和增强处理,AOP框架将自动生成AOP代理,
即:代理对象的方法=增强处理+被代理对象的方法。
在gradle 中引用spring aspect第三方库,@aspect就是使用了这个库。
定义切入bean & 切入点
在启动类中启动aspect支持,类似于
定义需要增强处理的普通业务组件
PS:
从主类中的注释和运行来看,可以大概看出
强制使用CGLIB的方式代理子类,而不是默认的基于接口的JDK代理
AOP编程其实是很简单的事情,纵观AOP编程,程序员只需要参与三个部分:
1、定义普通业务组件
2、定义切入点,一个切入点可能横切多个业务组件
3、定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作
所以进行AOP编程的关键就是定义切入点和定义增强处理,一旦定义了合适的切入点和增强处理,AOP框架将自动生成AOP代理,
即:代理对象的方法=增强处理+被代理对象的方法。
在gradle 中引用spring aspect第三方库,@aspect就是使用了这个库。
compile group: 'org.springframework', name: 'spring-aspects', version: '4.3.3.RELEASE'
定义切入bean & 切入点
@Aspect @Component /** * Component annotation is must. * @author ZHOUHAIBING * */ public class LogAspect { @Before("execution(* com.zhb.test.aop.*.*(..))") public void startLog(){ System.out.println("starting log....."); } }
在启动类中启动aspect支持,类似于
Spring's <aop:aspectj-autoproxy> XML element
@Configuration @EnableAspectJAutoProxy @ComponentScan(basePackages="com.zhb.test.aop") public class AopContextTest { public static void main(String[] args){ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AopContextTest.class); RegisterService rg = context.getBean("rr",RegisterService.class);//@EnableAspectJAutoProxy and set proxyTargetClass=true both aop run ok //RegisterServiceImpl rg = context.getBean(RegisterServiceImpl.class);//@EnableAspectJAutoProxy(proxyTargetClass=true) aop run ok. if else error //RegisterServiceImpl rg = (RegisterServiceImpl)context.getBean("rr",RegisterService.class);// the same as above rg.register(); //rg.registerNoPass(); } }
定义需要增强处理的普通业务组件
@Component("rr") public class RegisterServiceImpl implements RegisterService{ @Override public String register() { System.out.println("hello register"); return "hello world"; } public void registerNoPass(){ System.out.println("hello registerNoPass"); } }
PS:
RegisterService接口只定义了register一个方法。另一个方法是为了测试ProxyTargetClass的功能。
从主类中的注释和运行来看,可以大概看出
proxyTargetClass=true设置的作用。
强制使用CGLIB的方式代理子类,而不是默认的基于接口的JDK代理
相关文章推荐
- Spring 事务之Annotation实现方式
- 采用Annotation方式实现AOP
- Spring AOP 常用的四种实现方式
- AOP的annotation实现方式是基于AspectJ的实现
- Spring AOP的两种实现方式
- 使用Spring 2.0新特性实现前置通知--基于Annotation方式
- aop 例子(annotation方式实现)
- Spring AOP 常用的四种实现方式
- 以下是用Annotation的配置方式来实现简单Spring IOC
- Annotation方式实现AOP
- Spring AOP的annotation实现
- Spring---->采用Annotation的方式实现AOP
- Spring---->采用Annotation的方式实现AOP
- Spring AOP 常用的四种实现方式 - Spring之旅
- spring AOP的几种方式及实现原理分析
- 一个简单的基于注解的 Controller (spring 2.5 annotation 方式实现mvc )
- Spring Aop实现——Annotation方式(注解式)and Schema-based式(xml配置)
- Spring AOP 常用的四种实现方式
- 一个简单的基于注解的 Controller (spring 2.5 annotation 方式实现mvc )
- spring aop的实现方式(二)