java 按照bean查询_Spring 层次性依赖查找Bean

ca790de1-c0e9-43dd-96eb-bc519c6cdcf0.png

层次性依赖查找接口 - HierarchicalBeanFactory

双亲 BeanFactory:getParentBeanFactory()

层次性查找

根据 Bean 名称查找

基于 containsLocalBean 方法实现

根据 Bean 类型查找实例列表

单一类型:BeanFactoryUtils#beanOfType

集合类型:BeanFactoryUtils#beansOfTypeIncludingAncestors

根据 Java 注解查找名称列表

BeanFactoryUtils#beanNamesForTypeIncludingAncestors

实体类Rumenz.java / SuperRumenz.java

package com.rumenz;

public class Rumenz extends SuperRumenz{

private Integer id;

private String name;

@Override

public String toString() {

return "Rumenz{" +

"id=" + id +

", name='" + name + '\'' +

"} " + super.toString();

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

//SuperRumenz.java

package com.rumenz;

public class SuperRumenz {

private String key;

public String getKey() {

return key;

}

public void setKey(String key) {

this.key = key;

}

@Override

public String toString() {

return "SuperRumenz{" +

"key='" + key + '\'' +

'}';

}

}

**配置类Config.java / Config1.java **

package com.rumenz;

import org.springframework.context.annotation.Bean;

public class Config {

@Bean

public SuperRumenz superRumenz(){

SuperRumenz s=new SuperRumenz();

s.setKey("超级管理员");

return s;

}

}

// Config1.java

package com.rumenz;

import org.springframework.context.annotation.Bean;

public class Config1 {

@Bean

public static Rumenz rumenz(){

Rumenz r = new Rumenz();

r.setId(123);

r.setName("入门小站");

return r;

}

}

案例DemoApplication.java

package com.rumenz;

public class DemoApplication {

public static void main(String[] args) {

AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext();

ac.register(Config1.class);

ac.refresh();

ConfigurableListableBeanFactory beanFactory = ac.getBeanFactory();

System.out.println("父容器"+beanFactory.getParentBeanFactory()); //null

//层级的BeanFactory,创建一个父容器

HierarchicalBeanFactory parentBeanFactory = createBeanFactory();

displayBean(beanFactory,"rumenz");

displayBean(parentBeanFactory,"superRumenz");

//设置父容器

beanFactory.setParentBeanFactory(parentBeanFactory);

displayBean(beanFactory,"superRumenz");

displayBean(parentBeanFactory,"rumenz");

//递归查找Bean,双亲委派,先去父容器查找(parentBeanFactory),找不到最后去本地容器(beanFactory)查找

displayContainsBean(beanFactory,"superRumenz");

displayContainsBean(parentBeanFactory,"superRumenz");

ac.close();

}

private static void displayBean(HierarchicalBeanFactory beanFactory,String beanName){

System.out.println(beanFactory.containsLocalBean(beanName));

}

private static void displayContainsBean(HierarchicalBeanFactory beanFactory,String beanName){

System.out.println(containsBean(beanFactory,beanName));

}

private static boolean containsBean(HierarchicalBeanFactory beanFactory,String beanName){

BeanFactory parentBeanFactory = beanFactory.getParentBeanFactory();

if(parentBeanFactory instanceof HierarchicalBeanFactory){

HierarchicalBeanFactory hierarchicalBeanFactory = HierarchicalBeanFactory.class.cast(parentBeanFactory);

if(containsBean(hierarchicalBeanFactory,beanName)){

return true;

}

}

return beanFactory.containsLocalBean(beanName);

}

private static HierarchicalBeanFactory createBeanFactory(){

AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext();

ac.register(Config.class);

ac.refresh();

return ac.getBeanFactory();

}

}

输出

父容器null

true

true

false

false

true

true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值