首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring不调用@Bean方法

是指在Spring容器启动时,不会自动调用使用@Bean注解标注的方法。这种情况通常发生在以下两种情况下:

  1. 配置类未被@ComponentScan或@Configuration注解标注:Spring容器会扫描被@ComponentScan注解标注的类,或者被@Configuration注解标注的配置类中的@Bean方法,并将其实例化为Bean。如果配置类没有被正确标注,那么其中的@Bean方法将不会被调用。
  2. 未通过ApplicationContext获取Bean:即使配置类被正确标注,并且@Bean方法被调用,但如果没有通过ApplicationContext获取Bean实例,那么该方法返回的实例也不会被创建。

需要注意的是,即使Spring不调用@Bean方法,也可以手动通过ApplicationContext获取Bean实例,或者使用@Autowired注解将Bean注入到其他类中。

对于Spring不调用@Bean方法的解决方法,可以按照以下步骤进行操作:

  1. 确保配置类被正确标注:配置类应该使用@Configuration注解进行标注,以告诉Spring容器该类是一个配置类。
  2. 确保配置类被扫描到:使用@ComponentScan注解标注在配置类上,或者在Spring配置文件中配置<context:component-scan>元素,以确保Spring容器能够扫描到配置类。
  3. 通过ApplicationContext获取Bean:在需要使用Bean的地方,通过ApplicationContext的getBean方法获取Bean实例,确保@Bean方法被调用并返回正确的实例。

总结起来,Spring不调用@Bean方法可能是由于配置类未被正确标注或未被扫描到所致。通过正确标注配置类,并确保通过ApplicationContext获取Bean实例,可以解决该问题。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

static静态方法调用Spring(依赖注入)的bean

前言:一般需要在static方法调用注入进来的service,因为是静态方法,所以必须声明该service也必须是static的,这时候你会发现注入不进来,会报null指针,这个时候需要使用 @PostConstruct...第一种 Spring也基于JSR-250注解,包括@PostConstruct,@PreDestroy和@Resource 注解。...@PostConstruct 和@PreDestroy 注解:要定义安装和拆卸一个bean,我们只是声明了初始化方法和/或销毁,方法的参数。...在init-method属性指定一个方法,是被称为bean上后立即实例化。同样,销毁规定了被称为bean被从容器中取出之前的方法。...类上需要用@Component //解决static方法 调用注入对象的方法 @Autowired private ConfigDaoImpl configDaoImpl;

8.4K21

Spring AOP拦截从对象内部调用方法原因

当外部调用被拦截bean的拦截方法时,可以选择在拦截之前或者之后等条件执行拦截方法之外的逻辑,比如特殊权限验证,参数修正等操作。   但是最近在项目中要在一个事务中跨数据源进行操作。...这里出现的问题就是,如果我们要拦截某个类的多个方法,且在该类的方法中使用this调用要拦截的方法时会导致拦截失败。...在spring的源代码中通过一个增强对象的检查,控制了当前的内部调用是否使用代理来执行,这让人感到无奈。spring的作者们很隐晦的提出避免内部调用方法。...虽然这是spring官方推荐的避免内部调用的idea。 查看了相关资料,得到了一种方法,即在method1的内部,通过直接获取当前代理对象的方式然后通过代理对象调用method2,这样触发拦截。...这种方法可以成功触发拦截,但是也带来了其他问题,比如代码的织入,我们的代码将变得复杂而且晦涩,而且严格要求系统针对于当前的bean必须配置拦截器,否则会因为找不到拦截器而抛出异常。

2.6K10
  • Spring Bean方法反射调用行为不一致问题分析

    调试 打断点进入相关方法,发现事件服务是采用这种方式来调用相关方法的: 通过ApplicationContextHolder在spring启动时保存ApplicationContext,然后使用方法getBean...来根据map中的beanName来获取bean 使用反射获取相应的方法 调用方法invoke 可以看到,反射调用是没什么问题的,按照我们平常使用反射的经验来看,也完全不应该出问题。...分析 由于以前也读过Spring的源码,猜测应该是Spring使用cglib动态代理的类有问题,对于public和private方法调用方式可能不同。...,也就是说cglib对于私有方法并不会代理,而对于公有方法则会调用相应的MethodInterceptor 到这我们已经找到了两者行为不一致的原因: public 方法Spring拦截,最终是使用相关的...bean调用的, private 方法则是跟我们平常使用反射一样,得到了原始的方法,里面的实例属性全都没有初始化,都为null。

    88820

    Bean @session_spring方法注解

    用于参数用实体类接收 – @ApiModelProperty()用于方法,字段 表示对model属性的说明或者数据操作更改 – @ApiIgnore()用于类,方法方法参数 表示这个方法或者类被忽略...– @ApiImplicitParam() 用于方法 表示单独的请求参数 – @ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam 具体使用举例说明...;表示一个http请求的操作 value用于方法描述 notes用于提示内容 tags可以重新分组(视情况而用) @ApiParam() 用于方法,参数,字段说明;表示对参数的添加元数据...,可以不被swagger显示在页面上 比较简单, 这里不做举例 @ApiImplicitParam() 用于方法 表示单独的请求参数 @ApiImplicitParams() 用于方法,包含多个...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    54810

    关于在Spring方法内部调用自身方法事务 REQUIRE_NEW 生效的解释

    问题来自:Spring事务的传播行为中REQUIRES_NEW真的有效吗 这个是Spring 对拦截的实现有关。Spring 拦截实现的方法是动态生成一个代理类。...对于有接口实现的类代理,Spring 使用的是 Java 自带的代理生成方式。这种方式对 target.method() 方式的调用是可以拦截到的,对于类内调用 method() 方式则拦截不到。...}); dynamicProxy.a(); } } 执行结果为: invoke in proxy this is a this is b 从这可以看出你类内自行调用方法是不会被代理拦截到的...获取当前被代理的对象,直接进行invoke,类内方法也不会被cglib 代理到 我们写一个测试方法来试下,在上面main 方法里最后加入测试代码: Enhancer enhancer = new Enhancer...针对这种情况通过 threadlocal 的方式暴露了当前类的代理,可以使用 AopContext.currentProxy(); 方式得到,使用获取到的代理类再调用方法就可以再次走事务的处理逻辑了

    1.5K30

    Spring装配Bean

    spring三种方式装配bean: 自动化装配bean 借助java来进行bean装配 使用xml进行bean装配 自动化装配Bean Spring 从两个角度实现自动化装配 组件扫描,spring自动发现上下文中的...Bean 自动装配,spring自动满足bean之间的依赖 比如我在在类上添加注解@Component,这表明该类会作为组件类,并告知spring会为这个类创建Bean,但是组件扫描默认是启动的,我们任然需要配值...通过Java代码装配Bean 使用第三方的库装配到你的应用上,就不能采用自动化的注解,这时就需要使用XML和JAVA来进行配值。 Java注解是Spring4.0推荐的方法,属于显式配值。...注入 @Configuration //这里注意的是,没有使用包扫描的注解 public class JavaConfig { @Bean//使用Bean注解声明当前方法的返回值是一个Bean...(){ //当使用userFunctionService时候,就会调用这个里面的方法去获取bean UserFuctionService userFuctionService

    37710

    spring 配置bean

    概要: 在spring的IOC容器里配置Bean 在xml文件里通过bean节点来配置bean id:Bean的名称 spring容器 在spring IOC容器读取Bean配置创建Bean实例之前...WebApplicationContext是专门为WEB应用而准备的,它同意从相对于WEB根文件夹的路径中完毕初始化工作 从IOC容器中获取Bean 调用ApplicationContext的getBean...()方法 依赖注入的方式 spring支持3种依赖注入的方式 属性注入 构造器注入 工厂方法注入(非常少使用,推荐) 属性注入 属性注入即通过setter方法注入Bean的属性值或依赖的对象...value属性或子结点指定属性值 属性注入是实际应用中最经常使用的注入方式 构造方法注入 通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例在实例化后就能够使用 构造器注入在...但要求IOC容器中必须仅仅能有一个该类型的Bean //HelloWorld helloWorld = ctx.getBean(HelloWorld.class); //调用hello方法

    38910

    SpringBean

    一、什么是Bean 1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化); 2、凡是有方法或属性的类都需要实例化,这样才能具象化去使用这些方法和属性; 3、规律:凡是子类及带有方法或属性的类都要加上注册...Spring容器集中管理Bean的实例化,Bean实例可以通过BeanFactory的getBean(Stringbeanid)方法得到。...故Spring底层相当于调用了如下代码: Xxx = new xx.XxClass() 如果在配置文件中通过构造注入来创建Bean: 则Spring相当于调用如下代码: Bean bean =...如果我们指定Bean的作用域,则Spring会默认使用singleton作用域。Java在创建Java实例时,需要进行内存申请。销毁实例时,需要完成垃圾回收。这些工作都会导致系统开销的增加。

    35640

    Spring Bean 详解

    Spring Bean 详解 Ioc实例化Bean的三种方式 1 创建Bean 1 使用无参构造函数 这也是我们常用的一种。在默认情况下,它会通过反射调⽤⽆参构造函数来创建对象。...简单来说,就是调用某个类的静态方法创建对象 在实际开发中,我们使⽤的对象有些时候并不是直接通过构造函数就可以创建出来的,它可能在创 建的过程 中会做很多额外的操作。...读取注解配置时最终会调用ClassPathBeanDefinitionScanner及其子类实现的doScan方法,在这个方法中完成注解的读取配置。...使用细节 Spring框架延迟加载属性在调用getBean之后将会失效,因为getBean方法是初始化bean的入口,这不难理解,那么平时我们使用@Autowired等自动注入注解时能和@Lazy注解一起使用吗...在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。

    22710
    领券