-
如何为spring代理类设置属性值5
现在有一个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"呢
2012年9月14日 13:34
1个答案 按时间排序 按投票排序
-
采纳的答案
默认是没有办法的。我帮你写了个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();//记录好异常进行处理 } } } }
2012年9月14日 17:05
相关推荐
11. **设置代理类属性**:为Spring代理类设置属性值可以通过ApplicationContext的getBean方法或Autowired注解完成。对于非代理对象,可以直接注入;对于代理对象,可能需要通过特定方式如@Autowired注解配合@...
静态代理是在编译时期就确定了代理类,需要为每个被代理的目标类手动创建一个代理类。而动态代理则是在运行时生成代理类,这通常是通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口实现...
作者提供了一个工具类来帮助开发者处理这个问题,同时介绍了如何为Spring的代理类设置属性值。 Spring对Bean Validation规范的集成使得方法级别的验证成为可能,增强了业务逻辑的健壮性。此外,作者还总结了Spring...
JDK代理用于接口实现类,而CGLIB代理用于无接口或非代理类。 EL是JavaServer Faces (JSF) 和其他Java技术中用于在视图层解析表达式并获取数据的工具,它允许在运行时评估Java表达式,例如获取Bean属性、方法调用等...
Spring通过反射机制来实现这一过程,比如在上述的`TestIOC`例子中,Spring能够根据类名动态地创建对象,并通过setter方法注入属性值,实现了对象的实例化和配置。 **依赖注入(DI)**有多种实现方式,包括构造器...
5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 5.4.2.1. 注册用户自定义的PropertyEditor 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 ...
属性赋值阶段,Spring容器会将Bean定义中配置的属性值设置到Bean实例上。在这个过程中,容器会考虑属性值的依赖关系,并按需注入其他Bean或设置具体的值。 3. 初始化(Initialization) 初始化阶段是指Bean已经实例...
我们可以使用SpEL在配置文件中进行复杂的逻辑判断,或者在Bean属性中注入动态值。 5. **条件注解**: Spring提供了`@Conditional`注解,允许我们在特定条件下注册Bean。这在实现模块化和按需加载功能时非常有用。...
1. XML配置:Spring最初是以XML配置为主,开发者会在`beans.xml`文件中定义bean的定义,包括bean的类名、属性值、依赖关系等。XML配置提供了良好的可读性和灵活性,但随着项目复杂度增加,维护成本会提高。 2. Java...
11. **设置代理类属性值**:通过Spring的代理机制,可以在运行时为代理类设置属性值,以满足特定的需求。 12. **SpringDAO层支持**:Spring提供了DAO层的支持,包括JdbcTemplate、HibernateTemplate等,帮助简化...
一旦我们有了`Method`或`Field`对象,就可以在运行时动态地调用方法或设置/获取属性值: ```java Object obj = ...; // 父类实例 method.invoke(obj, parameters); // 调用方法,parameters是参数数组 field....
在这里,`class`属性值应替换为Spring管理的bean的ID,例如`com.example.MyAction`。 4. **事务管理**:在Spring中,我们可以使用`PlatformTransactionManager`接口来管理事务。在上述提到的`applicationContext....
它可以用于配置文件中的属性值绑定,以及AOP切点表达式。 10. **Spring AOP代理** Spring 2.0提供了两种AOP代理:JDK动态代理和CGLIB代理。JDK代理用于接口实现类,而CGLIB代理则用于没有接口或不希望修改接口的类...
8. **Spring表达式语言(SpEL)**:Spring Expression Language用于在运行时查询和操纵对象图,常用于配置文件中的条件判断和属性值设置。 9. **Spring AOP代理**:Spring使用两种类型的代理,即JDK动态代理和CGLIB...
3. **类型安全的属性注入**:通过@Value注解,开发者可以直接在bean中注入属性值,而这些值可以从属性文件中读取,提供了类型安全的检查。 4. **简化AOP**:Spring 3.1.0对AspectJ的集成进行了优化,使切面编程更加...
5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...
5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. AOP代理 6.2. @AspectJ支持 ...
6. **Spring Boot**:虽然标题中没有提及Spring Boot,但它是Spring生态中的重要组成部分,简化了Spring应用程序的初始设置。Spring Boot的自动配置也是基于反射,它可以自动识别类路径中的某些配置类,并根据它们...
5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. AOP代理 6.2. @AspectJ支持 ...
1. 对在上下文中配置的属性的处理,这里涉及的类是 TransactionAttributeSourceAdvisor,这是一个通知器,用它来对属性值进行处理,属性信息放在 TransactionAttribute 中来使用,而这些属性的处理往往是和对切入点...