现在有一个bean包含了私有属性,如下:
- @Component  
- public class Bean {  
-     String name;  
-   
-     public String getName() {  
-         return name;  
-     }  
-   
-     public void setName(String name) {  
-         this.name = name;  
-     }  
-       
- }  
 
它被AOP配置过代理,代理配置为:
 
- <aop:pointcut expression="execution(* com..*Bean.*(..))"  
-             id="txBean" />  
 
 现在对它进行测试:
- public class BeanTest extends SpringContextTestCase{  
-     @Autowired  
-     private Bean bean;  
-     @Test  
-     public void testBean(){  
-         bean.setName("dylan");  
-         System.out.println(bean.name);  
-         System.out.println(bean.getName());  
-     }  
- }  
 
 这里的测试结果中,第一个输出为null,第二个输出为dylan,
由于项目中需要直接通过bean.name的方式来获取属性值,却一直都只能得到null,请问如何才能获取到我所期望的值"dylan"呢
 
 
默认是没有办法的。我帮你写了个AOP切面 帮你完成设置属性。 
- import java.beans.PropertyDescriptor;  
- import java.lang.reflect.Field;  
- import java.lang.reflect.Method;  
-   
- import org.aspectj.lang.JoinPoint;  
- import org.aspectj.lang.annotation.After;  
- import org.aspectj.lang.annotation.Aspect;  
- import org.springframework.aop.support.AopUtils;  
- import org.springframework.beans.BeanUtils;  
- import org.springframework.core.annotation.Order;  
-   
- @Aspect  
- @Order(Integer.MIN_VALUE)  
- public class SetterAspect {  
-       
-     @After(value="execution(* *.set*(*)) && args(value)", argNames="value")  
-     public void after(JoinPoint jp, Object value) {  
-         Object proxy = jp.getThis();  
-         Object target = jp.getTarget();  
-           
-         if(AopUtils.isAopProxy(proxy)) {
-               
-             try {  
-                 Class<?> proxyClass = proxy.getClass();  
-                 Class<?> targetClass = target.getClass();  
-                 String methodName = jp.getSignature().getName();  
-                   
-                 Method m = BeanUtils.findDeclaredMethod(proxyClass, methodName, new Class[]{value.getClass()});  
-                 PropertyDescriptor descriptor = BeanUtils.findPropertyForMethod(m);  
-                 String propName = descriptor.getName();  
-                   
-                 Field f = targetClass.getClass().getDeclaredField(propName);  
-                 if(f != null) {  
-                     f.setAccessible(true);  
-                     f.set(proxy, value);  
-                 }  
-             } catch (Exception e) {  
-                 e.printStackTrace();
-             }  
-         }  
-     }  
-   
- }  
 为spring代理类设置属性值
原文:http://www.cnblogs.com/doudouxiaoye/p/5789287.html