`
didiluck
  • 浏览: 10362 次
  • 性别: Icon_minigender_1
  • 来自: 山东-->北京
社区版块
存档分类
最新评论

Spring 标注@Autowired 如果做到自动装配私有变量而不使用set方法的原理

 
阅读更多
Spring 标注@Autowired 如果做到自动装配私有变量而不使用set方法的原理

熟悉jdk的话就知道,方法就是使用java.lang.reflect.Field类的:Field.setAccessible(true); 将字段设置为‘true’,就可以直接使用set方法为其赋值了。

如果不设置‘true’的话,则会抛出‘java.lang.IllegalAccessException’的异常

Spring中的代码如下(标绿的部分):
------------------------------------------------------------------------------------------------------------------

          /**
          * Either this or {@link #getResourceToInject} needs to be overridden.
          */
          protected void inject(Object target, String requestingBeanName, PropertyValues pvs) throws Throwable {
               if (this.isField) {
                    Field field = (Field) this.member;
                    ReflectionUtils.makeAccessible(field);
                    field.set(target, getResourceToInject(target, requestingBeanName));

               }
               else {
                    if (checkPropertySkipping(pvs)) {
                         return;
                    }
                    try {
                         Method method = (Method) this.member;
                         ReflectionUtils.makeAccessible(method);
                         method.invoke(target, getResourceToInject(target, requestingBeanName));
                    }
                    catch (InvocationTargetException ex) {
                         throw ex.getTargetException();
                    }
               }
          }


分享到:
评论

相关推荐

    Spring使用@Autowired注解自动装配

    - **方法参数注入**:在需要依赖注入的方法参数上使用`@Autowired`,Spring会在调用方法时自动提供参数。 ```java public void doSomething(@Autowired MyService myService) { // ... } ``` ### 3. `@Qualifier`...

    Spring@Autowired注解与自动装配.rar

    - **自动装配候选列表**:可以使用`@Autowired`注解的`@Qualifier`注解的`value`属性,提供一个bean的名称列表,Spring会尝试从列表中找到匹配的bean。 ### 4. 配置控制 - **@Autowired注解的可选性**:使用`...

    (转)Spring中@Autowired注解和@Resource注解的区别

    `@Autowired`是Spring框架自带的一个注解,主要用于自动装配bean。它主要基于类型匹配,Spring会尝试找到与目标字段或方法参数类型相同的bean来注入。如果找到多个候选bean,可以通过指定`@Qualifier`来指定特定的...

    通过@Autowired注解注入bean的顺序,以及@bean注入.rar

    `@Autowired`注解由Spring提供,用于自动装配bean的依赖。当我们在字段、构造函数、方法或方法参数上使用`@Autowired`时,Spring会自动查找与所需类型匹配的bean,并将其注入到相应的位置。如果找到多个匹配的bean,...

    Spring In Action 使用@Autowired 和@ Resource 自动装配Bean

    在Spring框架中,`@Autowired`和`@Resource`都是用于自动装配Bean的重要注解,它们简化了依赖注入的过程,使得代码更加简洁、易于维护。本文将深入探讨这两个注解的使用、区别以及如何在实际开发中应用它们。 首先...

    基于Spring@Autowired注解与自动装配详谈

    在Spring 2.5中引入了@Autowired注解,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。使用@Autowired可以消除set、get方法,从而简化程序的开发。 在使用@Autowired时,需要在...

    Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)

    Spring框架的@Autowired自动装配是其依赖注入(Dependency Injection, DI)机制的核心部分,它极大地简化了Java应用的组件装配和管理。本篇文章将深入探讨@Autowired的XML版本、Annotation版本以及源码层面的理解,...

    Spring注解@Resource和@Autowired.doc

    如果使用 name 属性,则使用 byName 的自动装配策略,而使用 type 属性时则使用 byType 自动装配策略。如果既不指定 name 也不指定 type 属性,这时将通过反射机制使用 byName 自动装配策略。 在使用@Resource 时,...

    Spring使用@Autowired为抽象父类注入依赖代码实例

    使用这种方法,我们可以轻松地将依赖项注入到抽象父类中,而不需要在子类中重复编写代码。这样做可以使我们的代码变得更加简洁、易于维护和扩展。 在使用@Autowired为抽象父类注入依赖代码实例时,我们需要注意以下...

    Spring Ioc源码分析系列--@Autowired注解的实现原理.doc

    传统的装配方式需要手动维护大量的配置,而自动装配则可以根据 Bean 的依赖关系自动配置和注入。 @Autowired 注解的实现原理 ------------------------- @Autowired 注解的实现原理可以分为两个步骤:预处理和真正...

    SSH笔记-通过@Autowired配置注入关系

    在Spring框架中,`@Autowired`注解是一个关键特性,用于自动装配Bean的依赖。它极大地简化了传统XML配置中的bean依赖注入过程。本笔记将深入探讨如何在Spring 4中利用`@Autowired`注解配置注入关系,以及它与前一篇...

    Spring @Autowired

    在Java的Spring框架中,`@Autowired`是一个关键的依赖注入(Dependency Injection,简称DI)注解,它允许开发者自动装配Bean的依赖,无需手动设置属性或者调用构造函数。这个注解是Spring框架的核心特性之一,极大地...

    详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理

    @Autowired 是 Spring 框架提供的依赖注入注解,主要支持在 set 方法、field 和构造函数中完成 bean 注入。其注入方式是通过类型查找 bean,即 byType 的,如果存在多个同一类型的 bean,则使用 @Qualifier 来指定...

    12 @Autowired是如何工作的?-Spring注解源码深度揭秘-慕课专栏1

    首先,`@Autowired`的基本作用是自动装配Bean,即Spring容器会自动将合适的依赖注入到标记了该注解的构造函数、字段、setter方法或配置方法中。这减少了手动配置和查找依赖的代码,提高了开发效率和代码的可维护性。...

    因Spring AOP导致@Autowired依赖注入失败的解决方法

    Spring AOP 导致@Autowired 依赖注入失败的解决方法 Spring AOP(Aspect-Oriented Programming,面向切面编程)是一种编程技术,它允许开发者在不修改源代码的情况下,增加新的功能。然而,在使用 Spring AOP 时,...

    【Java面试】@Resource 和 @Autowired 的区别.doc

    在使用 @Autowired 注解时,如果在 Spring IOC 容器里面存在多个相同类型的 Bean 实例,那么 Spring 启动的时候,会提示一个错误,大概意思原本只能注入一个单实例 Bean,但是在 IOC 容器里面却发现有多个,导致注入...

    你所不知道的Spring的@Autowired实现细节分析

    在Spring框架中,`@Autowired`注解是一种自动装配依赖的方式,它允许开发者在不编写显式依赖注入代码的情况下,自动将Bean的依赖注入到需要的地方。本文将深入探讨`@Autowired`的实现原理。 1. **BeanPostProcessor...

    HibernateDaoSupport 与@Autowired

    3. 方法注入:在setter方法或带有`@PostConstruct`注解的方法上使用`@Autowired`。 4. 方法参数注入:在其他业务方法的参数上使用`@Autowired`。 结合`HibernateDaoSupport`和`@Autowired`,我们可以创建更加高效和...

Global site tag (gtag.js) - Google Analytics