为spring代理类设置属性值
现在有一个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代理类设置属性值的更多相关文章
- java 中利用反射机制获取和设置实体类的属性值
摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...
- java反射获取和设置实体类的属性值 递归所有父类
最近做一个通用数据操作接口,需要动态获取和设置实体类的属性值,为了通用实体做了多重继承,开始网上找到代码都不支持父类操作,只能自己搞一个工具类了,此工具类可以设置和获取所有父类属性,代码贴下面拿走不谢 ...
- c# 如何通过反射 获取\设置属性值
c# 如何通过反射 获取\设置属性值 //定义类public class MyClass{public int Property1 { get; set; }}static void Main(){M ...
- Format a Property Value 设置属性值的格式
In this lesson, you will learn how to set a display format and an edit mask to a business class prop ...
- 【java】之Method和Field反射获取和设置属性值
package com.javaluna.reflect; import java.lang.reflect.Field; import java.lang.reflect.Method; impor ...
- 如何获取value值,获取属性值,设置属性值,
1.获取select下拉框的value值, 2.获取select 的tid值 3.设置属性值 4.判断哪个单选框选中了 prop好像是判断的意思吧,个人理解勿喷谢谢!!!!!!
- C#反射设置属性值和获取属性值
/// /// 获取类中的属性值 /// /// /// /// public string GetModelValue(string FieldName, object obj) { try { T ...
- [转] C#反射设置属性值和获取属性值
/// /// 获取类中的属性值 /// /// /// /// public string GetModelValue(string FieldName, object obj) { try { T ...
- Spring boot 的 properties 属性值配置 application.properties 与 自定义properties
配置属性值application.properties 文件直接配置: com.ieen.super.name="MDD" 自定义properties文件配置:src/main/r ...
随机推荐
- Python内置类型性能分析
Python内置类型性能分析 timeit模块 timeit模块可以用来测试一小段Python代码的执行速度. class timeit.Timer(stmt='pass', setup='pass' ...
- express + mongodb 搭建一个简易网站 (四)
express + mongodb 搭建一个简易网站 (四) 目前网站整体页面都已经能全部展示了,但是,整个网站还有两个块需要做完才能算完整,一个连接数据库,目前网站上的数据都是抓取的本地假数据,所以 ...
- Appuim学习路-Appuim介绍
(学一个东西,总的知道它支持什么.为什么要选择它吧?所以我就去看github上的介绍了.发现大家介绍的来源大多来自于此) Appium是一个开源的自动化框架,是跨平台的,允许所有平台使用同一套AP ...
- sshd_config优化
sshd_config优化linux系统调优,参考百度搜索 linux ssh命令 /etc/init.d/sshd restart 重启ssh 193 ls 194 vim /e ...
- 第七章 二叉搜索树 (d1)AVL树:重平衡
- 【转】Repository 返回 IQueryable?还是 IEnumerable?
这是一个很有意思的问题,我们一步一步来探讨,首先需要明确两个概念(来自 MSDN): IQueryable:提供对未指定数据类型的特定数据源的查询进行计算的功能. IEnumerable:公开枚举数, ...
- C#以记事本(指定程序)打开外部文档(指定文档)
System.Diagnostics.Process.Start("notepad.exe", "D:\\a.txt");
- 版本号比较函数-js
面试前,让做的一个版本号比较函数. <script type="text/javascript"> var v1=prompt("请输入第一个版本号" ...
- gdb 调试带参数程序
在gdb中,运行程序使用r或是run命令. 程序的运行,你有可能需要设置下面四方面的事. 1.程序运行参数. set args 可指定运行时参数.(如:set args 10 20 30 40 50) ...
- Nginx详解(正向代理、反向代理、负载均衡原理)
Nginx配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行 ...