aop注解案例,使用Spring的注解方式实现AOP出错问题

1,使用Spring的注解方式实现AOP出错问题你启用注解了吗?你启动了查询包了吗?我在你的beans.xml并没有看到-------------------<context:annotation-config/><context:component-scan base-package="搜索注解包"/>
2 , spring aop切面表达式详解及例子 切面类型execution格式通配符例子一、 execution :使用“ execution (方法表达式)”匹配方法执行;二、 within :使用“ within (类型表达式)”匹配指定类型内的方法执行;三、 this :使用“ this (类型全限定名)”匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口方法也可以匹配;注意this中使用的表达式必须是类型全限定名,不支持通配符;四、 target :使用“ target (类型全限定名)”匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配;注意target中使用的表达式必须是类型全限定名 , 不支持通配符;五、 args :使用“ args (参数类型列表)”匹配当前执行的方法传入的参数为指定类型的执行方法;注意是匹配传入的参数类型 , 不是匹配方法签名的参数类型;参数类型列表中的参数必须是类型全限定名,通配符不支持;args属于动态切入点,这种切入点开销非常大,非特殊情况最好不要使用;六、 @within :使用“ @within (注解类型)”匹配所以持有指定注解类型内的方法;注解类型也必须是全限定类型名;七、 @target :使用“ @target (注解类型)”匹配当前目标对象类型的执行方法 , 其中目标对象持有指定的注解;注解类型也必须是全限定类型名;八、 @args :使用“ @args (注解列表)”匹配当前执行的方法传入的参数持有指定注解的执行;注解类型也必须是全限定类型名;九、 @annotation :使用“ @annotation (注解类型)”匹配当前执行方法持有指定注解的方法;注解类型也必须是全限定类型名;十、 bean :使用“ bean (Bean id或名字通配符)”匹配特定名称的Bean对象的执行方法;Spring AOP扩展的 , 在AspectJ中无相应概念;
3 , spring实现aop的注解有哪些在方法参数加一个JoinPoint 例如public void doBefore(JoinPoint jp) { Object o = jp.getTarget();`//这个方法可以拿到目标对象 }你启用注解了吗?你启动了查询包了吗?我在你的beans.xml并没有看到-------------------【aop注解案例,使用Spring的注解方式实现AOP出错问题】
4 , spring 30 注解 AOP如果是WEB项目可以把包放在项目下WEB-INF/lib目录下.若是J2SE或J2ME项目则放在与src同级的lib目录下.学习深入后也可自己定义包的存放目录.至于spring框架的用法.是要看项目与团队的编程习惯而定.只要不错怎么用都行. 以下我就给个Spring的实例:?xml version="1.0" encoding="UTF-8"?beans xmlns= ;xmlns:xsi= ;xmlns:aop= ;xmlns:tx= ;xsi:schemaLocation=; default-autowire="byName" default-lazy-init="true"bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"property name="driverClassName"value$/value/propertyproperty name="url"value$/value/propertyproperty name="username"value$/value/propertyproperty name="password"value$/value/property/beanbean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"property name="dataSource" ref="dataSource" /property name="mappingDirectoryLocations"listvalueclasspath*:/com/wxc/entity/model/value/list/propertyproperty name="schemaUpdate" value="http://www.lisdn.com/gkrj/shjy/true" /property name="hibernateProperties"propsprop key="hibernate.dialect"$/propprop key="hibernate.connection.pool_size"5/propprop key="hibernate.show_sql"true/propprop key="hibernate.cglib.use_reflection_optimizer"true/propprop key="hibernate.cache.provider_class"org.hibernate.cache.EhCacheProvider/propprop key="hibernate.hibernate.cache.use_query_cache"true/prop/props/property/beanbean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor"property name="sessionFactory"ref bean="sessionFactory" //property/bean!-- setup transaction manager--bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"property name="sessionFactory"ref bean="sessionFactory" //property/beanbean name="publicManager" class="com.wxc.manager.PublicManager"/!-- 支持 @AspectJ 标记--aop:aspectj-autoproxy /!-- 以AspectJ方式 定义 AOP --aop:config proxy-target-class="true" aop:advisor pointcut="execution(* com.wxc.dao.*Dao.*(..))" advice-ref="txAdvice" /aop:advisor pointcut="execution(* com.wxc.manager.*.*Manager.*(..))" advice-ref="txAdvice" / !-- --/aop:config!-- 基本事务定义,使用transactionManager作事务管理,默认get*方法的事务为readonly,其余方法按默认设置. 默认的设置请参考Spring文档事务一章. --tx:advice id="txAdvice"tx:attributestx:method name="get*" read-only="true" /tx:method name="find*" read-only="true" /tx:method name="count*" read-only="true" /tx:method name="remove*" read-only="true" /tx:method name="*" rollback-for="RuntimeException" //tx:attributes/tx:advice/beans5,如何通过自定义注解实现AOP切点定义判断当前名为signatureName的方法是否在invokeClass类所实现的API接口中被Tag 。(实现3和4的判断)判断当前类是否为Object.class,若不是则执行第三步 , 否则执行第四步判断当前名为signatureName的方法是否在类invokeClass中被tag(实现1和2的判断)上面三项没有为真,则调用当前类的父类继续递归(实现5和6的判断)虽然我很聪明 , 但这么说真的难到我了6,spring boot 使用AOP添加全局日志时只要加了Around注解任何应该是你的around的方法返回值设置成void的了,把它设置成Object,然后返回调用JoinPoint.proceed()的值忘记调用JoinPoint的proceed()方法了吧 。。。改成c= drivermanager.getconnection("jdbc:sqlserver://localhost:1433; databasename=wdsjk","sa","zjy");7 , JAVASpring注解实现AOP权限拦截如何取得方法上自定义主要问题在于不同的Annotation的拦截是不同的 。例如method级别的拦截 。我们可以通过getMethodAnnotation(Class)的获取annotation 。如果没有设置annotation,获取为空 。举个例子:// 这里判断是否拦截方法if(!(handler instanceof HandlerMethod))return true;}HandlerMethod method = (HandlerMethod)handler;//这里获取了一个Menu的annotation 。Menu sm = method.getMethodAnnotation(Menu.class);if(sm!=null){ //如果确实设置了Menu的annotation,就会进入此区域 。第一种:注解配置aop注解配置aop(使用 aspectj 类库实现的),大致分为三步: 1. 使用注解@aspect来定义一个切面,在切面中定义切入点(@pointcut),通知类型(@before, @afterreturning,@after,@afterthrowing,@around). 2. 开发需要被拦截的类 。3. 将切面配置到xml中,当然,我们也可以使用自动扫描bean的方式 。这样的话,那就交由spring aop容器管理 。另外需要引用 aspectj 的 jar 包: aspectjweaver.jar aspectjrt.jar

    推荐阅读