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);
}
}