- 浏览: 659062 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (345)
- java (63)
- Struts2 (11)
- Spring2.5 + (17)
- Hibernate (25)
- Struts2 Spring hibernate (5)
- log4j (3)
- apache tomcat (12)
- oracle (22)
- oracle_存储过程 (4)
- mysql (18)
- jquery (11)
- prototype (5)
- js (19)
- quartz (5)
- 设计模式 (6)
- eclipse/MyEclipse 注意事项 (9)
- eclipse (0)
- css (6)
- 正则表达式 (2)
- linux (18)
- PHP (6)
- 多线程 (20)
- XML (1)
- jstl (3)
- mongoDB (7)
- android (20)
- 反射 (1)
- IOS (46)
- SVN (3)
- C/C++ (4)
- 百度地图 (2)
- IO/SOCKET (3)
- 百度地图JS (1)
- 树莓派/香蕉派 (1)
最新评论
-
anny101:
想转发一下,不知道怎么转发。评论一下吧。方便查看。
fetch = FetchType.EAGER 作用 -
Navee:
果然我这也是是防火墙问题
解决 Linux 安装 httpd局域网无法访问 -
dhyang909:
...
oracle 10g+ 行列转换 -
国产希特勒:
真强,居然有人把公司的面试题挂到javaeye上了
锦江国际的一道面试题(很简单) -
tomfish88:
比如我要拦截不同业务的service类里面的方法 @Poi ...
Spring AOP annotation 拦截表达式 分析
applicationContext.xml
MyAOP:
PersonDao:
PersonDaoImpl:
PersonMng:
SpringTest:
<?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:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" 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/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd "> <context:component-scan base-package="com.mhm"/> <!-- aop使用注解时,必须配 --> <aop:aspectj-autoproxy/> </beans>
MyAOP:
package com.mhm.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; 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 MyAOP { @SuppressWarnings("unused") @Pointcut("execution(* com.mhm.mng.impl..*.*(..))")//AOP表达式语言 //执行业务方法时拦截,*表示返回类型, //..表示对impl下的子包中的类也拦截 //*表示所有类 //*表示所有方法 //(..)表示方法的参数为随意 private void anyMethod() {}//声明一个切入点 @Before("anyMethod() && args(name)")//定义前置通知 //args(name)表示拦截的方法必须有一个参数,配合下面的,表示参数为String类型 public void doBefore(String name) { System.out.println("前置通知:" + name); } @AfterReturning(pointcut="anyMethod()", returning="revalue")//定义后置通知 public void doAfterReturning(String revalue) { System.out.println("后置通知"); } @After("anyMethod()")//定义最终通知 public void doAfter(){ System.out.println("最终通知"); } @AfterThrowing(pointcut="anyMethod()", throwing="ex")//定义异常通知 public void doAfterThrowing(Exception ex){ System.out.println("异常通知: " + ex); } @Around("anyMethod()")//环绕通知 public Object doAround(ProceedingJoinPoint pjp) throws Throwable { //环绕通知最适合做权限验证 //次return必须写 System.out.println("进环绕通知"); Object obj = pjp.proceed(); System.out.println("出环绕通知"); //出通知为最后输出,最终通知在出环绕通知的前面 return obj; } }
PersonDao:
package com.mhm.dao; public interface PersonDao { /** * 得到名字 * @param name */ public String getName(int id); /** * 保存 */ public void save(String name); /** * 更新 */ public void update(int id); }
PersonDaoImpl:
package com.mhm.dao.impl; import org.springframework.stereotype.Repository; import com.mhm.dao.PersonDao; @Repository public class PersonDaoImpl implements PersonDao { public String getName(int id){ System.out.println("我是dao的getName:" + id); return "getNameById: " + id; } public void save(String name){ throw new RuntimeException("this is a exception"); //System.out.println("我是dao的save(),保存姓名:" + name); } public void update(int id){ System.out.println("我是dao的update()"); } }
PersonMng:
package com.mhm.mng.impl; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.mhm.dao.PersonDao; import com.mhm.mng.PersonMng; @Service public class PersonMngImpl implements PersonMng { @Autowired private PersonDao personDao; @SuppressWarnings("unused") @PostConstruct private void init(){ System.out.println("我是PersonMngImpl中的init()"); } @SuppressWarnings("unused") @PreDestroy//要使用此注解,在客户端必须使用AbstractApplicationContext private void destroy(){ System.out.println("我是PersonMngImpl中的destroy()"); } public String getName(int id){ //System.out.println("我是mng的getName:" + id); return personDao.getName(id); } public void save(String name){ //System.out.println("我是save()"); personDao.save(name); } public void update(int id){ personDao.update(id); } }
SpringTest:
package junit.test; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.mhm.mng.PersonMng; public class SpringTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void springtest(){ // ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); // PersonMng personMng = (PersonMng)ctx.getBean("personMngImpl"); // personMng.save(); AbstractApplicationContext actx = new ClassPathXmlApplicationContext("applicationContext.xml"); PersonMng personMng = (PersonMng)actx.getBean("personMngImpl"); personMng.save("mahongmin"); actx.close(); } }
发表评论
-
springmvc mybatis,注解事务的使用
2015-12-04 17:30 1229两个XML配置中,需要把扫描的类区分出来。 sp ... -
spring mvc rest风格的URL输入中文乱码问题
2015-12-04 10:48 1907<!-- 处理请求时返回json字符串的中文乱码 ... -
Spring +hibernate 声明式 事物 + annotation
2012-03-22 19:49 949在applicationContext.xml中 &l ... -
Spring AOP annotation 用环绕通知写日志
2011-11-16 10:34 1471package com.mhm.mng.impl; im ... -
Spring AOP annotation 简单实例
2011-11-14 16:12 2885最后输出(可以看出各种通知的时间): 我是前置通知。 ... -
@Transactional 事务回滚 分析
2011-11-08 16:51 4315@Transactional 事务回滚 Spring的 ... -
Spring AOP annotation 拦截表达式 分析
2011-11-08 14:28 1831在app.xml中要加入aop的命名空间,看 http:// ... -
自定义标签中 如何使用 Spring 的 ioc
2011-11-07 17:38 1405自定义标签,继承了BodyTagSupport 在标签 ... -
简单模拟 Spring 的 ioc
2011-07-15 14:33 1258beans.xml <?xml version=&qu ... -
Spring 中创建通知
2010-11-09 13:25 994这些通知类型,结合方 ... -
AOP 概念
2010-11-09 10:55 972连接点(jointpoint):一个连接点是一个程序执行过程的 ... -
Spring.AOP下的 hello world !
2010-11-09 10:48 1066此方法只做演示,项目中不使用 项目中用annotation ... -
web启动,quartz 关联的servlet 启动,得到Spring的bean ,servletContext 获取数据源
2010-07-29 17:21 2581package com.cal.servlet; imp ... -
使用annotation减少spring bean的配置
2010-04-23 17:42 1095http://blog.csdn.net/dqatsh/arc ... -
用main调试spring
2010-04-23 17:36 1249import org.springframework.c ... -
使用 Annotation将配置资源注入到Bean中
2010-04-23 16:21 1175csnd速度太慢,今天写博客这个功能都无法使用 关于 &qu ...
相关推荐
**Spring AOP 使用实例** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它提供了一种在不修改原有代码的情况下,通过代理方式添加额外功能的技术。这种技术使得我们...
Spring AOP 使用教程 Spring AOP(Aspect-Oriented Programming)是一种编程技术,能够帮助开发者在软件系统中实现一些通用的功能,如日志记录、安全检查、事务管理等。下面是关于 Spring AOP 使用教程的详细知识...
JavaEE Spring AOP(面向切面编程)是企业级应用开发中的重要技术,它允许...无论是通过注解还是XML配置,掌握Spring AOP的使用都能显著提升我们的开发效率。在实践中,可以根据项目的具体需求选择最适合的实现方式。
接下来,我们使用Spring AOP来实现数据过滤。这通常涉及以下步骤: 1. **定义切点(Pointcut)**:确定哪些方法需要进行权限检查。这可以通过注解或XML配置来实现,例如定义一个名为`@DataAccess`的注解,并将其...
在Spring Boot项目中,配置和使用AOP相对简单。首先,我们需要引入Spring AOP和AspectJ的依赖,这通常在pom.xml或build.gradle文件中完成。然后,我们可以定义一个切面(Aspect),它包含通知(Advice)——即在特定...
在提供的 `lib` 压缩包中,应包含 Spring AOP 和 Spring IOC 相关的 jar 包,如 `spring-aop-x.x.x.jar` 和 `spring-context-x.x.x.jar` 等,它们是使用这两个功能的基础。请确保引入正确的版本,并正确配置到项目的...
在项目中,我们通常会将这个jar包引入到类路径下,以便使用Spring AOP的功能。 总的来说,Spring AOP通过提供面向切面的编程能力,极大地提高了代码的可复用性和可维护性,降低了系统复杂度,特别是在处理共性问题...
在这个过程中,Spring AOP 使用 configBeanDefinitionParser 来解析 AOP 配置文件,并生成相应的 Bean 定义对象。 3. 注册 AutoProxyCreator:在解析 AOP 配置文件时,Spring AOP 也会注册一个 ...
4. **代理模式的创建**:Spring AOP 使用`org.springframework.aop.framework.ProxyFactoryBean`或`@EnableAspectJAutoProxy`注解来配置代理。`ProxyFactoryBean`是XML配置方式,而`@EnableAspectJAutoProxy`是基于...
Spring AOP,全称为Aspect Oriented Programming,是面向切面编程的一种编程范式,它是对传统的面向对象编程(OOP)的一种补充。在OOP中,核心是对象,而在AOP中,核心则是切面。切面是关注点的模块化,即程序中的...
Spring AOP使用一个名为`@Pointcut`的注解来声明切入点,并通过`@Before`, `@After`, `@AfterReturning`, `@AfterThrowing` 和 `@Around` 注解与通知关联。 3. **织入(Weaving)**:织入是将切面应用到目标对象以...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
本笔记主要探讨了如何在Spring应用中使用AOP来实现横切关注点,如日志、事务管理、性能监控等。 首先,理解AOP的基本概念至关重要。AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或责任。切面由两个主要...
一、适合人群 1、具备一定Java编程基础,初级开发者 2、对springboot,mybatis,mysql有基本认识 3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 ...4、spring boot,mybatis,druid,spring aop的使用
在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型、组装切面以及使用JUnit4进行测试。 首先,我们需要理解Spring AOP的基础概念。AOP的核心是切点(Pointcut),它定义了关注点在何处...
Spring AOP使用两种主要的代理技术:JDK动态代理和CGLIB动态代理。JDK动态代理适用于接口的场景,而CGLIB则用于没有实现接口的情况。在这两种情况下,代理对象都会持有目标对象的引用,并在其上调用方法。具体来说:...
3. **切入点表达式**:Spring AOP使用一种基于正则表达式的语言来定义切入点,用于匹配连接点。例如,`execution(* com.example.service.*.*(..))`匹配com.example.service包下的所有类的所有方法。 4. **Spring ...
现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...