SpringAop之注解

使用注解进行简化aop的配置

切点是run方法

Car.java

package com.lubby.bean;

import org.springframework.stereotype.Component;

@Component("car")
public class Car {

	public void run(){
		System.out.println("Car is running....");
	}

}

切面

DoSomething.java

package com.lubby.bean;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class DoSomething {
	@Pointcut("execution(* com.lubby.bean.Car.run(..))")
	private void run() {	}
	@Before("run()")
	public void prepare() {
		System.out.println("checking the car");
	}
	@After("run()")
	public void stop() {
		System.out.println("stopping the car to stoping place....");
	}
	@AfterThrowing("run()")
	public void fix() {
		System.out.println("fixing thr car....");
	}
}

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
	default-lazy-init="true"
	xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
    ">

	<!-- 自动检测并注册为spring中的bean+启用注解 -->
	<context:component-scan base-package="com.lubby.bean"></context:component-scan>
	<aop:config>
		<aop:aspect ref="something">
			<aop:pointcut expression="execution(* com.lubby.bean.Student.readBook(..))"
				id="readBook" />
		</aop:aspect>
	</aop:config>
 <aop:aspectj-autoproxy/>   ---自动代理Bean
</beans>

test.xml

public class Test {

	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("com/lubby/bean/test.xml");
		Car car = (Car) ctx.getBean("car");
		car.run();
	}
}

结果

checking the car
Car is running....
stopping the car to stoping place....

SpringAop之注解

时间: 2024-10-30 02:42:57

SpringAop之注解的相关文章

springAOP自定义注解讲解

注解: 可以看作是对 一个 类/方法 的一个扩展的模版,每个 类/方法 按照注解类中的规则,来 为 类/方法 注解不同的参数,在用到的地方可以得到不同的 类/方法 中注解的各种参数 与值. 注解的原理: 注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动 态代理类.而我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象 $Proxy1.通过代理对象调用自定义注解(接口)的方法,会最终调用 AnnotationInvocationHandler的i

springAop @AfterReturning注解 获取返回值

@AfterReturning(returning="rvt", pointcut="@annotation(com.sinosoft.redis.cache.PutCache)") public Object AfterExec(JoinPoint joinPoint,Object rvt){ rvt 这个就是方法返回值 }

Spring AOP注解形式简单实现

实现步骤: 1:导入类扫描的注解解析器 命名空间:xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-2.5.xsd" xml配置文件如下配置

spring核心之AOP学习总结二

一:springAOP常用的注解 @Aspect:声明方面组件 @Before:声明前置通知 @After-returning:声明后置通知 @After:声明最终通知 @Around:声明环绕通知 @After-throwing:声明异常通知 二:使用SpringAOP的注解对总结一中的案例进行重构 1:注释掉方面组件的声明以及将方面组件应用到目标组件的配置 1 <!-- 配置日志组件 2 <bean id="operatorLogger" class="com

redis分布式锁小试

一.场景 项目A监听mq中的其他项目的部署消息(包括push_seq, status, environment,timestamp等),然后将部署消息同步到数据库中(项目X在对应环境[environment]上部署的push_seq[项目X的版本]).那么问题来了,mq中加入包含了两个部署消息 dm1 和 dm2,dm2的push_seq > dm1的push_seq,在分布式的情况下,dm1 和 dm2可能会分别被消费(也就是并行),那么在同步数据库的时候可能会发生 dm1 的数据保存 后于

SpringBoot之AOP使用

说到SpringBoot,难免会想到Spring.对于Spring,我曾用其开发过很多大大小小的项目.当使用SpringBoot之后,给人最直观的感受,用古人一句话:”大道至简”. SpringBoot相比Spring,它的优点其实就是Spring的缺点或不足: (1)内嵌入Tomcat.Jetty等容器,无需Tomcat就能直接跑起来(这让我想到开发一个庞大的项目,光启动Tomcat就需要花好几分钟); (2)部署方便,一个可执行的Jar,你可以将其以Docker容器的形式管理部署,也可以使用

springAop 使用@Around,@After等注解时,代码运行两边的问题

springAop使用@Around,@After等注解时,代码运行两边的问题 将@Component注解删掉就好了

springAOP注解方式定义切入点报错error at ::0 can&#39;t find referenced pointcut

[说明] 1.使用spring版本:4.0.4 2.springAOP相关依赖包: 1)aopalliance-1.0.jar 2)aspectjweaver-1.8.9.jar 3)aspectjrt-1.8.9.jar 3.分析: 1)当切面类的方法上通知注解直接输入切入点表达式时,没有报错.切面类代码如下: import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect

SpringAOP+注解实现简单的日志管理

今天在再次深入学习SpringAOP之后想着基于注解的AOP实现日志功能,在面试过程中我们也经常会被问到:假如项目已经上线,如何增加一套日志功能?我们会说使用AOP,AOP也符合开闭原则:对代码的修改禁止的,对代码的扩展是允许的.今天经过自己的实践简单的实现了AOP日志. 在这里我只是简单的记录下当前操作的人.做了什么操作.操作结果是正常还是失败.操作时间,实际项目中,如果我们需要记录的更详细,可以记录当前操作人的详细信息,比如说部门.身份证号等信息,这些信息可以直接从session中获取,也可