一不小心进了这个坑 记录一下
@Autowired来的spring 下的bean,则当前类必须也是spring bean才能调用它,不能用new Xxx()来获得对象,这种方式获得的对象无法调用其内的@autowired的bean
1. 类1 加入spring pool |
public class PersonServiceImpl implements PersonService{ public void save(){ System.out.println("This is save for test spring"); } public List<String> findAll(){ List<String> retList = new ArrayList<String>(); for(int i=1;i<10;i++){ retList.add("test"+i); } return retList; } } 加入spring pool <bean id="personServiceImpl" class="com.machome.testtip.impl.PersonServiceImpl" > </bean> |
2.类2 autowired类1, 并且也加入spring pool |
public class ProxyPServiceImpl implements ProxyPService { public void save(){ System.out.print("this is proxy say:"); personService.save(); } public List<String> findAll(){ System.out.print("this is proxy say:"); return personService.findAll(); } @Autowired PersonService personService; } |
3.直接new类2,则执行其方法时出null pointer错误 | ProxyPService proxyPService = new ProxyPServiceImpl(); proxyPService.save(); 执行报错: java.lang.NullPointerException at com.machome.testtip.impl.ProxyPServiceImpl.save(ProxyPServiceImpl.java:18) at com.machome.testtip.TestSpring2.testSave(TestSpring2.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) |
4.解决:用spring 方式获取类2的bean,再执行其方法,没问题 | ProxyPService proxyPService = null; try { String[] confFile = {"spring.xml"}; ctx = new ClassPathXmlApplicationContext(confFile); proxyPService = (ProxyPService)ctx.getBean("ProxyPServiceImpl"); } catch (Exception e) { e.printStackTrace(); } proxyPService.save(); 执行: this is proxy say:This is save for test spring |
相关推荐
在 SpringBoot 多线程处理任务中无法使用 @Autowired 注入 bean 的问题,可以通过创建一个工具类来解决,这个工具类可以用于获取 bean 对象,从而解决多线程处理任务中无法使用 @Autowired 注入 bean 的问题。
`@Autowired`是Spring框架的一部分,它用于自动将依赖对象注入到需要它们的bean中。这个注解基于类型匹配,Spring会尝试找到类型匹配的bean并将其注入到目标字段或方法中。如果存在多个候选bean,可以通过指定`@...
在Spring框架中,`@Autowired`注解是一个关键特性,用于自动装配Bean的依赖。它极大地简化了传统XML配置中的bean依赖注入过程。本笔记将深入探讨如何在Spring 4中利用`@Autowired`注解配置注入关系,以及它与前一篇...
当我们谈论"BeanPostProcessor实现注入的@Autowired注入的对象是增强的代理对象"时,实际上是在讨论如何通过`BeanPostProcessor`来对`@Autowired`注入的bean进行代理增强。 首先,让我们了解`@Autowired`注解的工作...
首先,它会对标注了 @Autowired 的 Bean 进行预处理,然后调用 postProcessProperties() 方法将依赖的 Bean 实例注入到目标 Bean 中。 在预处理阶段,AutowiredAnnotationBeanPostProcessor 会对 Bean 的定义进行...
在Java的Spring框架中,`@Autowired`是一个关键的依赖注入(Dependency Injection,简称DI)注解,它允许开发者自动装配Bean的依赖,无需手动设置属性或者调用构造函数。这个注解是Spring框架的核心特性之一,极大地...
- 如果还是无法确定,Spring会抛出异常,表示无法解析依赖。 4. **依赖注入**:一旦找到了合适的Bean,Spring就会调用相应的方法(构造函数、setter或字段)来注入这个Bean。 5. **处理未指定类型的依赖**:如果...
Spring框架的@Autowired自动装配是其依赖注入(Dependency Injection, DI)机制的核心部分,它极大地简化了Java应用的组件装配和管理。本篇文章将深入探讨@Autowired的XML版本、Annotation版本以及源码层面的理解,...
在实际开发中,结合使用`HibernateDaoSupport`和`@Autowired`,我们可以快速构建出健壮且易于维护的DAO层,同时充分利用Spring的IoC容器提供的各种优势。对于`自定义HibernateDaoSupport`这个文件,可能包含了开发者...
当我们需要在非Spring管理的普通类中调用Spring管理的bean对象时,需要掌握特定的方法。这篇文档将详细介绍如何实现这一操作,并探讨相关的源码和技术工具。 首先,理解Spring的核心概念——依赖注入(Dependency ...
Spring @Autowired 注入小技巧 在 Spring 框架中,@Autowired 注解是用来实现自动依赖注入的。它可以根据类型(Type)进行自动注入,并且默认注入的 bean 为单例(SingleTon)的。下面我们来详解一些 @Autowired ...
当在字段或方法上使用`@Autowired`时,Spring会查找与该字段或方法参数类型相匹配的Bean,并将其注入。如果找到多个匹配的Bean,可以通过提供`@Qualifier`注解来指定特定的Bean。如果没有任何匹配的Bean,Spring会抛...
在Spring容器初始化Bean时,会调用一系列实现了`BeanPostProcessor`接口的类。`BeanPostProcessor`接口提供了一种后置处理机制,允许在Bean实例化前后进行自定义操作。`AutowiredAnnotationBeanPostProcessor`是专门...
在Spring Boot框架中,普通类调用bean是常见的操作,特别是在构建复杂应用时。这篇博客“17. Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中...
在启动 Spring IoC 时,容器自动装载了一个 AutowiredAnnotationBeanPostProcessor 后置处理器,当容器扫描到 @Autowired、@Resource 或 @Inject 时,就会在 IoC 容器自动查找需要的 bean,并装配给该对象的属性。...
当有多个相同类型的 Bean 时,@Autowired 会抛出 BeanCreationException。此时可以结合 @Qualifier 注解来指定特定的 Bean,例如: ```java @Autowired @Qualifier("userServiceImpl") public IUserService ...
4. `@Autowired`的可选性:默认情况下,`@Autowired`是非必需的,如果找不到匹配的bean,Spring会抛出异常。你可以通过设置`@Autowired(required=false)`让它成为可选的。 5. Spring配置问题:检查`application....
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
此外,我们还可以在构造器中使用@Autowired,这样在实例化Person时,Spring就会自动调用带参数的构造器,并注入对应的bean。对于没有匹配类型的bean,Spring会抛出异常。如果希望在找不到匹配bean时使用null或者...