怎么获取Bean对象

241 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

获取bean对象的方式需要先注入bean对象,在spring中可以通过xml文件进行bean的注入,如下:

<bean id="user" class="com.springdemo.user.UserInfo">
    <constructor-arg ref="quest">
</bean>

使用xml文件进行配置的bean选择ClassPathXmlApplicationContext作为获取bean的应用上下文比较合适,执行调用ClassPathXmlApplicationContext加载xml文件并获取bean对象的引用,如下:

public static void main(String[] args) {
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF /spring/user.xml");
    UserInfo userInfo = context.getBean(UserInfo.class);
    userInfo.query();
    context.close();
}

也可以通过注解的方式代替xml配置,如下:

@Configuration
public class UserConfig {

    @Bean
    public UserInfo userInfo(){
        return new FundUserInfo(quest());
    }
}

获取此种bean对象的方式可以通过ApplicationContext获取,获取方式又有多种,如下:

public void getContext(){
    // 通过类对象获取
    UserInfo userInfo = context.getBean(Knight.class);
    userInfo.query();
    // 通过bean名称获取
    UserInfo nameUser = (UserInfo) context.getBean("userInfo");
    userInfo.query();
    // 通过bean名称和类对象获取
    UserInfo nameClassUser = context.getBean("userInfo",Knight.class);
}

如果需要自定义获取bean对象的方式可以实现ApplicationContextAware接口,如下:

@Component
public class SpringContext implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(SpringContext.applicationContext == null) {
            SpringContext.applicationContext = applicationContext;
        }
    }

    //获取applicationContext
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    //通过name获取 Bean.
    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }

    //通过class获取Bean.
    public static <T> T getBean(Class<T> clazz){
        return getApplicationContext().getBean(clazz);
    }

    //通过name,以及Clazz返回指定的Bean
    public static <T> T getBean(String name,Class<T> clazz){
        return getApplicationContext().getBean(name, clazz);
    }

}