//jdk代理
注意:使用JDK提供的动态代理实现 要求我们的目标对象必须实现接口
1 user接口
package com.spring.aop;
public interface User {
void save();
void update();
}
2 的接口实现类
package com.spring.aop;
public class UserImpl implements User {
private String name;
public UserImpl()
{
}
public UserImpl(String name)
{
this.name = name;
}
@Override
public void save() {
// TODO Auto-generated method stub
System.out.println("save:"+name);
}
@Override
public void update() {
// TODO Auto-generated method stub
System.out.println("update:"+name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3 代理工厂的实现
package com.spring.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyFactory implements InvocationHandler {
private Object target;
public Object createUserImpl(Object target)
{
this.target = target;
return Proxy.newProxyInstance(this.target.getClass().getClassLoader(),
this.target.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
UserImpl ui = (UserImpl)target;
Object result = null;
if (ui.getName() != null)
{
result = method.invoke(target, args);
}
return result;
}
}
4 测试结果,说白了,即使通过代理类生成新的代理类,代理类在原先的类的方法处理添加了新的处理
然后执行代理类的方法。即在不处理原先类的情况下改变了原先类的执行结果。
package com.spring.test;
import com.spring.aop.ProxyFactory;
import com.spring.aop.User;
import com.spring.aop.UserImpl;
public class AopTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ProxyFactory a = new ProxyFactory();
User man = (User)a.createUserImpl(new UserImpl());
man.save();
man.update();
User woman = (User)a.createUserImpl(new UserImpl("woman"));
woman.save();
woman.update();
}
}
分享到:
相关推荐
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-...
jboss-aop-jdk50-client.jar
2. 动态代理:引入了`java.lang.reflect.Proxy`类,使得动态创建代理对象成为可能,便于实现AOP(面向切面编程)。 3. NIO.2:Java 7引入了NIO.2,但1.6版本已经包含了一些改进,如更好的文件系统访问API,异步I/O...
3. **动态代理**:Java 1.6引入了对动态代理的增强,允许在运行时创建接口的代理实现,这在AOP(面向切面编程)和事件处理中非常有用。 4. **增强的I/O和NIO**:JDK 1.6扩展了Java的I/O API,引入了NIO.2,提供了一...
- **动态代理类**:允许在运行时创建实现了指定接口的新类,这在实现AOP(面向切面编程)或事件处理中非常有用。 - **改进的XML处理**:增强了Java API for XML Processing (JAXP),支持XPath 2.0和XSLT 2.0,使...
这里的`spring-aop-3.2.xsd`根据项目使用的Spring版本进行替换,以确保正确解析配置。 总的来说,`spring-aop.xsd`是Spring AOP配置的基础,它帮助开发者理解并正确编写AOP配置,提升开发效率。通过学习和熟练掌握...
4. **动态代理**:JDK 6引入了动态代理类的实现,允许在运行时创建代理类,增强了面向切面编程(AOP)的能力。 5. **Swing增强**:Swing组件库得到了大量改进,包括更好的外观和感觉,以及新的组件和事件处理机制。...
1. **AOP代理**:Spring AOP支持两种代理方式,即JDK动态代理和CGLIB代理。JDK代理用于实现接口的类,而CGLIB代理则用于未实现接口的类。spring-aop.jar包含了这些代理机制的相关类,如`org.springframework.aop....
8. **Java动态代理(Dynamic Proxies)**: JDK 8提供了更强大的动态代理机制,允许在运行时创建接口的实现类,这对于AOP(面向切面编程)和测试框架非常有用。 9. **Nashorn JavaScript引擎**: JDK 8引入了Nashorn ...
本资料包"spring-aop-4.2.6.RELEASE.zip"正是针对Spring AOP的一个重要版本,它与"spring-framework.zip"一同构成了强大的弹簧框架体系。开源项目的精神在此得以充分体现,为开发者提供了丰富的功能和高度的灵活性。...
- **代理模式**:Spring AOP通过两种代理方式实现,即JDK动态代理和CGLIB代理。前者适用于接口实现类,后者适用于无接口的类。 - **注解驱动**:从4.0.0.RELEASE开始,Spring AOP支持完全基于注解的配置,大大...
这些改进提高了代码的类型安全性、可读性和可维护性,同时也促进了面向切面编程(AOP)和元数据的应用。 在使用JDK 1.5时,开发者可以利用新的编译器选项,如"-target"和"-source",来控制源代码和字节码的目标版本...
3. **动态代理**:JDK 1.6引入了`java.lang.reflect.Proxy`类,允许开发者创建动态代理对象,方便实现回调和AOP(面向切面编程)。 4. **NIO.2**:新I/O API,也称为NIO.2,提供了更现代、更易用的文件系统操作接口...
本篇将详细讲解Spring中的AOP实现,特别是JDK动态代理的应用。 首先,我们要了解什么是AOP(Aspect Oriented Programming,面向切面编程)。AOP是一种编程范式,旨在解决应用程序中分散的、横切关注点的问题,如...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个...Spring Aop-4.0.0.RELEASE版本在保持易用性的同时,提升了性能和对新特性的支持,是Java开发者进行企业级应用开发的重要选择。
6. **动态代理(Dynamic Proxies)**: 动态代理允许在运行时创建符合给定接口的新类,这在实现AOP(面向切面编程)或事件监听器等方面非常有用。 7. **增强的异常处理**: 支持空指针异常的链式处理,使得调试时能更...
3. **动态代理**:Java语言规范中加入了动态代理,允许在运行时创建实现了指定接口的新类,这对于实现AOP(面向切面编程)和测试框架非常有用。 4. **NIO.2(New I/O 2)**:引入了新的文件系统API,提供更强大和...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许程序员在不修改源代码的情况下,通过添加额外的行为(即“切面”)来增强应用程序的功能。在Spring AOP中,主要有三个核心概念:Advice、Pointcut和...
本资源"java开发常用jar包之spring--aop.rar"聚焦于Spring框架的一个重要组件——Aspect Oriented Programming(面向切面编程,简称AOP)。AOP是Spring框架的核心特性之一,它允许开发者将关注点从核心业务逻辑中...