- 浏览: 151299 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
hx0637:
楼主!小弟要面临面试了,能否指导下小弟?
面试 深圳一家公司的 -
kljismi:
你好,我现在正在开这项目的代码,但是我不明白@Privileg ...
权限管理模块分析 -
yzhw:
终于找到了
ImageSizer.java -
sunloveny:
国
struts国际化 -
jackotty:
谢谢楼主的分享
struts validator验证框架
spring对AOP的支持
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换
如何强制使用CGLIB实现AOP?
* 添加CGLIB库,SPRING_HOME/cglib/*.jar
* 在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>
JDK动态代理和CGLIB字节码生成的区别?
* JDK动态代理只能对实现了接口的类生成代理,而不能针对类
* CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
因为是继承,所以该类或方法最好不要声明成final
applicationContext.xml
SecurityHandler.java
UserManagerImpl.java
Client.java
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换
如何强制使用CGLIB实现AOP?
* 添加CGLIB库,SPRING_HOME/cglib/*.jar
* 在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>
JDK动态代理和CGLIB字节码生成的区别?
* JDK动态代理只能对实现了接口的类生成代理,而不能针对类
* CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
因为是继承,所以该类或方法最好不要声明成final
applicationContext.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!-- <aop:aspectj-autoproxy proxy-target-class="true"/> --> <bean id="securityHandler" class="com.bjsxt.spring.SecurityHandler"/> <bean id="userManager" class="com.bjsxt.spring.UserManagerImpl"/> <aop:config> <aop:aspect id="security" ref="securityHandler"> <aop:pointcut id="allAddMethod" expression="execution(* com.bjsxt.spring.UserManagerImpl.add*(..))"/> <aop:before method="checkSecurity" pointcut-ref="allAddMethod"/> </aop:aspect> </aop:config> </beans>
SecurityHandler.java
package com.bjsxt.spring; import org.aspectj.lang.JoinPoint; public class SecurityHandler { private void checkSecurity(JoinPoint joinPoint) { Object[] args = joinPoint.getArgs(); for (int i=0; i<args.length; i++) { System.out.println(args[i]); } System.out.println(joinPoint.getSignature().getName()); System.out.println("----------checkSecurity()---------------"); } }
UserManagerImpl.java
package com.bjsxt.spring; public class UserManagerImpl { // implements UserManager { public void addUser(String username, String password) { System.out.println("-------UserManagerImpl.addUser()----------"); } public void deleteUser(int id) { System.out.println("-------UserManagerImpl.deleteUser()----------"); } public String findUserById(int id) { System.out.println("-------UserManagerImpl.findUserById()----------"); return null; } public void modifyUser(int id, String username, String password) { System.out.println("-------UserManagerImpl.modifyUser()----------"); } // private void checkSecurity() { // System.out.println("----------checkSecurity()---------------"); // } }
Client.java
package com.bjsxt.spring; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Client { public static void main(String[] args) { BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); //UserManager userManager = (UserManager)factory.getBean("userManager"); UserManagerImpl userManager = (UserManagerImpl)factory.getBean("userManager"); userManager.addUser("张三", "123"); //userManager.deleteUser(1); } }
发表评论
-
ssh_training_itemmgr jsp
2008-12-29 19:01 1201index.jsp <%@ page languag ... -
src\com\bjsxt\drp\business\util
2008-12-29 17:32 1145AppException.java package com. ... -
ssh_training_itemmgr 04
2008-12-29 17:28 752DataDict.java package com.bjs ... -
ssh_training_itemmgr 03
2008-12-29 17:21 949DrpExceptionHandler.java packa ... -
ssh_training_itemmgr 02
2008-12-29 17:11 1025MessageResources.properties 引 ... -
ssh_training_itemmgr 01
2008-12-29 16:58 776applicationContext-actions.xml ... -
采用声明式事务
2008-12-29 15:08 779采用声明式事务 1、声明式事务配置 * 配置Session ... -
采用编程式事务
2008-12-29 13:27 981采用编程式事务 1、getCurrentSession()与 ... -
spring+struts的集成(第二种集成方案)
2008-12-29 12:40 770spring+struts的集成(第二种集成方案) 原理:将业 ... -
spring+struts的集成(第一种集成方案)
2008-12-29 12:26 750spring+struts的集成(第一种集成方案) 原理:在A ... -
spring_dynamic_proxy
2008-12-29 00:38 742SecurityHandler.java package c ... -
AOP3
2008-12-29 00:17 702spring对AOP的支持 Aspect默认情况下不用实现 ... -
AOP2
2008-12-29 00:11 927spring对AOP的只是(采用配置文件的方式) 1、sp ... -
AOP1
2008-12-29 00:08 698spring对AOP的只是(采用Annotation的方式) ... -
spring_static_proxy
2008-12-29 00:01 759UserManager.java package com.b ... -
根据类型自动装配
2008-12-28 23:55 709引用<?xml version="1.0&qu ... -
根据名称自动装配
2008-12-28 23:53 740applicationContext-beans.xml 引 ... -
spring_scope
2008-12-28 23:42 1018spring Bean的作用域: scope可以取值: ... -
spring_injection
2008-12-28 23:14 5551、spring的普通属性注入 参见:spring文档3. ... -
DYNAMIC PROXY
2008-12-24 23:53 797package com.bjsxt.spring; ...
相关推荐
《Spring AOP4:深入理解面向切面编程》 在软件开发中,Spring框架以其强大的功能和灵活性,已经成为Java企业级应用的事实标准。而在Spring框架中,AOP(Aspect Oriented Programming,面向切面编程)是其核心特性...
4. **aopalliance-1.0.jar**:AOP Alliance是一个接口集,为不同的AOP框架提供了一个统一的API。Spring AOP和AspectJ等框架都遵循这些接口,使得它们可以互操作。比如,`org.aopalliance.intercept....
spring对AOP的支持 1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK...
4. **织入(Weaving)**:织入是将切面应用到目标对象来创建新的代理对象的过程。Spring支持三种织入方式:编译时织入、类加载时织入和运行时织入。在上述例子中,运行时织入通过Spring的ApplicationContext来实现。...
4. **安全性检查**: 在方法调用前进行权限验证,确保只有授权的用户或服务才能执行特定操作。 **总结** AOP Alliance作为面向切面编程的桥梁,简化了多个AOP框架之间的交互,提高了代码的可复用性和模块化。通过...
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在减少代码的重复性和增强可维护性,特别是在处理系统中的横切关注点时。这些关注点,如日志、事务管理、安全检查等,往往分散在系统的各个部分...
面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在通过将关注点分离,提高软件的模块化程度。AOP的核心是切面,它封装了横切关注点,如日志、事务管理、性能监控等,使得这些功能可以独立于主...
4. **使用代理**:Spring会根据需要自动创建代理对象来处理通知。默认情况下,Spring使用基于Java的代理,但对于需要在静态方法或非Spring管理对象上应用AOP的情况,可能需要使用CGLIB或AspectJ字节码代理。 5. **...
4. **Spring Boot**:基于Spring框架的快速开发工具,内建对AOP的支持,并且简化了项目配置。 5. **Logback/Log4j**:日志框架,常与AOP结合使用,记录切面的执行信息。 6. **TestNG/JUnit**:测试框架,用于验证...
在Java应用中,aopalliance.jar包扮演着至关重要的角色,它包含了一些核心接口,如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.aop.Advice`,这些接口定义了拦截器和通知的概念,它们是AOP的...
4. **连接点(Join Point)**:连接点是切点在实际运行时的实例,比如一个具体的方法调用。 5. **织入(Weaving)**:织入是将切面应用到目标对象并创建一个代理的过程。Spring AOP支持三种织入方式:编译时织入、...
面向切面编程(AOP)是一种编程范式,旨在将横切关注点(如日志、安全等)与业务逻辑分离,从而提高模块化。AOP通过预定义的“切面”对横切关注点进行模块化,从而可以在不修改业务逻辑代码的情况下增加新功能。动态...
开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具...
4. 基于Java的AOP配置 Spring 4.0引入了基于Java的AOP配置,可以通过@EnableAspectJAutoProxy注解启用AOP,并在配置类中定义切面。这种方式与基于XML的配置相比,更加简洁且易于测试,因为所有的配置都集中在一个...
4. **丰富的切入点表达式语言**:Spring AOP支持使用SpEL(Spring Expression Language)来定义复杂的切入点表达式,这让开发者能够更加灵活地控制通知的触发条件。 #### 四、Spring AOP的实现示例 接下来,我们...
4. **测试**:在测试类中,创建Spring容器并调用`UserService`的方法,你会看到日志信息先于方法执行输出。 以上就是Spring AOP的基本用法。在实际项目中,你可以根据需求定义不同的通知类型,如`@After`、`@Around...
4. 安全控制:在方法调用前检查权限。 总结起来,"spring-aop-jar"涉及了Spring框架中的面向切面编程模块,包括Spring AOP和AspectJ的集成。通过理解和熟练使用这些组件,开发者可以有效地解耦关注点,提高代码的可...
它定义了一些基础的AOP接口,如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.aop.Advice`,这些接口被广泛应用于诸如AspectJ、Spring AOP等AOP框架中。 二、AOPAlliance在Spring 2.0中的作用 ...
4. **aopalliance-1.0.jar**:AOP Alliance是一个包含AOP领域通用接口的库,旨在促进不同AOP实现之间的互操作性。Spring AOP就是基于这些接口进行设计的,因此这个库是Spring AOP和其他AOP实现之间协作的基础。 在...