spring的aop| 耗时:0.359秒|351477条结果

SpringAOP配置

springAOP配置 1.先写一个普通类: package com.spring.aop; public class Common {  public void execute(String username,String password){   
http://www.itnose.net/detail/6719382.html 2017-02-17 10:04   [Spring]

SpringAOP

AOP,全称Aspect—Oriented Programming,面向切面编程。他是一种称为“横切”技术,剖解封装对象内部,并将那些影响多个类公共行为封装进一个可复用模块(Aspect),即切面,简单来讲,就是将那些与业务无关但是却需要被业务模块调用逻辑封装起来,减少重复代码,降低耦合度
http://www.itnose.net/detail/6717778.html 2017-02-15 11:20   [Spring]

SpringAOP详解

SpringAOP详解 一、AOP基础 1.1AOP是什么 考虑这样一个问题:需要对系统中某些业务做日志记录,比如支付系统中支付业务需要记录支付相关日志,对于支付系统可能相当复杂,比如可能有自己支付系统,也可能引入第三方支付平台,面对这样支付系统该如何解决呢? 传统解决方案 1.日志部分
http://www.itnose.net/detail/6495222.html 2016-04-27 20:19   [Spring]

Spring AOP应用

希望需要使用这些对象时候插入进来,不希望使用时候去掉即可,这种设计模式就称为AOPSpring AOP是实现AOP一种技术。Spring AOP最常用就是采用XML配置文件方式。Spring AOP只支持在目标对象某个方法前后调用服务代码。   在目标对象方法执行之前
http://www.itnose.net/detail/491414.html 2014-01-24 15:05   [Spring]

SpringAOP(1)

6.2 SpringAOP AOP(Aspect Orient Programming),也就是面向切面编程,作为面向对象编程一种补充。问世时间并不太长,甚至在国内翻译还不太统一(有些书翻译成面向方面编程),但它确实极好地补充了面向对象编程方式。面向对象编程将程序分解成各个层次对象,而
http://www.itnose.net/detail/479584.html 2014-01-23 16:50   [Spring]

SpringAOP(2)

6.2.4 代理接口 当目标Bean实现类实现了接口后,Spring AOP可以为其创建JDK动态代理,而无须使用CGLIB创建代理,这种代理称为代理接口。 创建AOP代理必须指定两个属性:目标Bean和处理。实际上,很多AOP框架都以拦截器作为处理。因为Spring AOP与IoC容器良好
http://www.itnose.net/detail/479581.html 2014-01-23 16:50   [Spring]

Spring AOP认识

1.常用到AOP地方:日志记录、安全检查、事务管理等(避免了在多处编写同样方法) 2.AOP三种织入方式:1)编译期,2)类装载器,3)运行期   两种典型实现方式:1)AspectJ-- 最全面向切面框架,2)Spring AOP实现-通过引用AspectJ,常与
http://www.itnose.net/detail/475016.html 2014-01-22 18:31   [Spring]

spring Aop 问题

在sping中用aop进行异常捕获: public class AopExceptionHandler implements ThrowsAdvice { public void afterThrowing(Method method, Object[] args, Object target, Exception ex ) throws Throwable { System.out.println(target.getClass().getName()); for (int i = 0; i < args.length; i++) { System.out.println("args["+i+"]:"+args[i]); } System.out.println("Exception class: " + ex.getClass().getName()); System.out.println("执行:" + method.getName() + "时发生异常:"+ex);// 输出异常信息 System.out.println("执行:" + method.getName() + "时发生异常:"+ex.getLocalizedMessage());// 输出异常信息 System.out.println("执行:" + method.getName() + "时发生异常:"+ex.getMessage());// 输出异常信息 System.out.println("执行:" + method.getName() + "时发生异常:"+ex.fillInStackTrace());// 输出异常信息 System.out.println("异常信息打印结束!"); } } 我现在就想得到异常详细信息 然后存到数据库里去 ,而这里我只能得到异常名字,这样是没有什么意义. args[0]:-1 Exception class: java.lang.NullPointerException 执行:findTreeRootJson时发生异常:java.lang.NullPointerException 执行:findTreeRootJson时发生异常:null 执行:findTreeRootJson时发生异常:null 执行:findTreeRootJson时发生异常:java.lang.NullPointerException 异常信息打印结束! 上面是异常出现时打印信息 我想得到控制台中打印详细信息 回复讨论(解决方案) 没有人知道吗? StringBuffer buf = new StringBuffer(); buf.append(e.getLocalizedMessage()); StackTraceElement[] stack = e.getStackTrace(); if(stack != null){     for(StackTraceElement element : stack){ buf.append(";" + element.toString());     } } System.out.println(buf.toString()); Java code StringBuffer buf = new StringBuffer(); buf.append(e.getLocalizedMessage()); StackTraceElement[] stack = e.getStackTrace(); if(stack != null){     for(StackTraceElement element : sta…… 你方法还是得不到 
http://www.itnose.net/detail/379658.html 2014-01-03-15:32   [JavaWeb]

springaop错误

    我用spring2.5开发aop,可是做拦截时候报错,代码如下: package cn.itcast.service; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; /**  *   * 切面  *  */ @Aspect public class MyInterceptor {     @Pointcut("execution (* cn.itcast.service.impl.PersonServiceBean.*(..))")     private void anyMethod() {}          @Before("anyMethod()")     public void doAccessCheck(){      System.out.println("前置通知");     } } package cn.itcast.service; public interface PersonService {     public void save(String name);     public void update(String name,Integer id);     public String getPersonName(Integer id); } package cn.itcast.service.impl; import cn.itcast.service.PersonService; public class PersonServiceBean implements PersonService { public void save(String name) { System.out.println("我是save()方法"); } public void update(String name, Integer id) { System.out.println("我是update()方法"); } public String getPersonName(Integer id) {     System.out.println("我是 getPersonName()方法"); return "xxxx"; } } package junit.test; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.itcast.service.PersonService; public class SpringAOPTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void interceptorTest(){ ApplicationContext cxt = new ClassPathXmlApplicationContext("beans.xml"); PersonService personService = (PersonService)cxt.getBean("personService"); personService.save("xxxxx"); } } <?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:aop="http://www.springframework.org/schema/aop"        xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">     <aop:aspectj-autoproxy/>     <bean id="myInterceptor" class="cn.itcast.service.MyInterceptor"/>     <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"></bean> </beans> 错误信息如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personService' defined in class path resource [beans.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut anyMethod at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) at junit.test.SpringAOPTest.interceptorTest(SpringAOPTest.java:17) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut anyMethod at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:317) at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:206) at org.springframework.aop.aspectj.AspectJExpressionPointcut.checkReadyToMatch(AspectJExpressionPointcut.java:193) at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:174) at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:195) at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:250) at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:284) at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:113) at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:85) at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:66) at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:362) at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:325) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:361) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1344) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473) ... 38 more 回复讨论(解决方案) org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personService' defined in class path resource [beans.xml]: Initialization of bean failed  创建'personService' 时候出错了,先检查一下,bean有没有被创建 创建service bean时候出错了,检查bean是否被创建了  <bean id="personService" class="cn.itcast.service.PersonServiceBeanImpl "></bean> service后面接实现类 试试/     创建bean怎么就错了呢?明明创建了bean类啊! <bean id="personService" class="..............."/> class不就是指向实现类吗? /      现在问题并不是创建bean类问题,而是拦截器问题,因为我把拦截器类和配置bean去掉就可以正常运行了,只是我不明白我拦截器哪里出现了问题,而且我也只是测试了一个前置通知方法啊! 出现这种错误需要检查JDK版本
http://www.itnose.net/detail/130484.html 2013-12-31-19:38   [J2EE]

SpringAOP用法

       AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上问题,比如日志,事务,权限等。 一 AOP基本概念 (1) Aspect(切面):通常是一个类,里面可以定义切入点和通知 (2) JointPoint(连接点):程序执行过程中明确点,一般是被调用方法 (3) Advice(通知):AOP在特定切入点上执行增强处理,有before,after,afterReturning,afterThrowing,around。也就是在连接点JointPoint方法执行时,用于增强处理。 (4) Pointcut(切入点):就是带有通知连接点,在程序中主要体现为书写切入点表达式。可以理解为一系列JointPoint。 (5) AOP代理:AOP框架创建对象,代理就是目标对象加强。SpringAOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类 二 Spring AOP SpringAOP代理还是离不开SpringIOC容器,代理生成,管理及其依赖关系都是由IOC容器负责,Spring默认使用JDK动态代理,在需要代理类而不是代理接口时候,Spring会自动切换为使用CGLIB代理,不过现在项目都是面向接口编程,所以JDK动态代理相对来说用还是多一些。 三 基于注解AOP配置方式 1.启用@AsjectJ支持 在applicationContext.xml中配置下面一句,用于识别Aspect注解配置: <aop:aspectj-autoproxy /> 加入下面一句话,用于识别Spring注解配置 <context:component-scan base-package="com.springcode"/> 2.通知类型介绍 (1)Before:在目标方法被调用之前做增强处理,@Before只需要指定切入点表达式即可 (2)After:在目标方法完成之后做增强,无论目标方法时候成功完成。@After可以指定一个切入点表达式 (3)AfterReturning:在目标方法正常完成后做增强,@AfterReturning除了指定切入点表达式后,还可以指定一个返回值形参名returning,代表目标方法返回值 (4)AfterThrowing:主要用来处理程序中未处理异常,@AfterThrowing除了指定切入点表达式后,还可以指定一个throwing返回值形参名,可以通过该形参名来访问目标方法中所抛出异常对象 (5)Around:环绕通知,在目标方法完成前后做增强处理,环绕通知是最重要通知类型,像事务,日志等都是环绕通知,注意编程中核心是一个ProceedingJoinPoint 3.例子 (1)LogAspectModel.java --> 切面类 @Component @Aspect public class LogAspectModel { // 定义切点表达式 @Pointcut("execution(* com.baowei.dao.*.*(..))") public void pointCut_() { } // 前置通知 : 在执行目标方法之前执行 @Before("pointCut_()") public void begin() { System.out.println("before ... (可用于开启事务)"); } // 后置/最终通知:在执行目标方法之后执行 【无论是否出现异常最终都会执行】 @After("pointCut_()") public void after() { System.out.println("after ... (可用于关闭事务)"); } // 返回后通知: 在调用目标方法结束后执行 【出现异常不执行】 @AfterReturning("pointCut_()") public void afterReturning() { System.out.println("afterReturning..."); } // 异常通知: 当目标方法执行异常时候执行此关注点代码 @AfterThrowing("pointCut_()") public void afterThrowing() { System.out.println("afterThrowing()"); } // 环绕通知:环绕目标方式执行 @Around("pointCut_()") public void around(ProceedingJoinPoint pjp) throws Throwable { System.out.println("@Around 环绕前...."); pjp.proceed(); // 执行目标方法 System.out.println("@Around 环绕后...."); } }(2)UserDao.java @Repository public class UserDao { public User getUser(int id) { System.out.println("get User ..."); User user = new User(); user.setId(id); user.setName("zhang"); return user; } public void deleteUser(int id) { System.out.println("delete User ..."); } } (3)UserService.java @Service public class UserService { // 持有UserDao private UserDao userdao; public void setUserdao(UserDao userdao) { this.userdao = userdao; } public User getUser(int id) { return userdao.getUser(id); } public void deleteUser(int id) { userdao.deleteUser(id); } } (4)User.java public class User { private int id; private String name; public User() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString() { return "User [id=" + id + ", name=" + name + "]"; } } (5)UserTest.java public class UserTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "bean.xml"); UserDao userDao = context.getBean(UserDao.class); userDao.deleteUser(1); } } (6)bean.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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 开启注解扫描 --> <context:component-scan base-package="com.baowei" /> <!-- 开启aop注解方式 --> <aop:aspectj-autoproxy /> </beans> (7)  注意 上面是一个比较简单测试,基本涵盖了各种增强定义。注意:做环绕通知时候,调用ProceedingJoinPointproceed()方法才会执行目标方法。 4.通知执行优先级 进入目标方法时,先织入Around,再织入Before,退出目标方法时,先织入Around,再织入After,最后才织入AfterReturning。 注意:Spring AOP环绕通知会影响到AfterThrowing通知运行,不要同时使用!同时使用也没啥意义。 5.切入点定义和表达式 @Pointcut("execution(* com.aijava.springcode.service..*.*(..))") 第一个*表示匹配任意方法返回值,..(两个点)表示零个或多个,上面第一个..表示service包及其子包,第二个*表示所有类,第三个*表示所有方法,第二个..表示方法任意参数个数 @Pointcut("within(com.aijava.springcode.service.*)") within限定匹配方法连接点,上面就是表示匹配service包下任意连接点 6.基于XML形式配置方式 开发中如果选用XML配置方式,通常就是POJO+XML来开发AOP,大同小异,无非就是在XML文件中写切入点表达式和通知类型。 例子: (1)LogXml.java @Component public class LogXml { public void begin() { System.out.println("before ... (可用于开启事务)"); } public void after() { System.out.println("after ... (可用于关闭事务)"); } public void afterReturning() { System.out.println("afterReturning..."); } public void afterThrowing() { System.out.println("afterThrowing()"); } public void around(ProceedingJoinPoint pjp) throws Throwable { System.out.println("@Around 环绕前...."); pjp.proceed(); // 执行目标方法 System.out.println("@Around 环绕后...."); } } (2)bean_xml.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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 开启注解扫描 --> <context:component-scan base-package="com.baowei.dao" /> <!-- 基于XMLAOP配置 --> <bean id="logXml" class="com.baowei.aspectmodel.LogXml" /> <aop:config> <!-- 定义切点表达式 --> <aop:pointcut expression="execution(* com.baowei.dao.*.*(..))" id="pt" /> <!-- <aop:config>里面可以多个Aspect --> <aop:aspect ref="logXml"> <aop:around method="around" pointcut-ref="pt" /> <aop:before method="begin" pointcut-ref="pt" /> <aop:after method="after" pointcut-ref="pt" /> <aop:after-returning method="afterReturning" pointcut-ref="pt" /> <aop:after-throwing method="afterThrowing" pointcut-ref="pt" /> </aop:aspect> </aop:config> </beans> (3)UserXMlTest.java public class UserXMlTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "bean_xml.xml"); UserDao userDao = context.getBean(UserDao.class); userDao.deleteUser(1); } } 7.源码下载
http://www.itnose.net/detail/6665806.html 2016-11-15 21:49   [Spring]

Spring AOP实现原理

AspectJ;而动态代理则以Spring AOP为代表。本文会分别对AspectJ和Spring AOP实现进行分析和介绍。 使用AspectJ编译时增强实现AOP 之前提到,AspectJ是静态代理增强,所谓静态代理就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强。 举个
http://www.itnose.net/detail/6649194.html 2016-10-01 00:00   [Spring]

Spring AOP最佳实践

3.x之后版本,可以直接使用@ExceptionHandler注解,完成全局异常处理功能。具体细节可以参考Spring MVC Exception Handling Example这篇文章。 二、安全检查 javax.servlet.Filter是Servlet规范为我们提供一种AOP支持,通过它
http://www.itnose.net/detail/6482759.html 2016-04-07 10:09   [Spring]

Spring aop实现原理

简介   前段时间写java设计模式--代理模式,最近在看Spring Aop时候,觉得于代理模式应该有密切联系,于是决定了解下Spring Aop实现原理。   说起AOP就不得不说下OOP了,OOP中引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为一个集合。但是
http://www.itnose.net/detail/6479319.html 2016-03-31 00:56   [J2SE]

SpringIOC和AOP

  IOC:即控制反转,主要意思就是Spring容器来管理对象初始化,而不需要程序员人工使用new方式来创建对象,并且当A对象依赖于B对象时,在配置文件中可以指定,同样不需要程序员在构造函数或是setter中进行对象注入。   AOP:面向切面编程。其实就是一种新不同于继承代码重用技术
http://www.itnose.net/detail/6457854.html 2016-02-25 10:17   [J2SE]

  1  2  3  4  5 下一页>