Spring在代码中获取bean的几种方式

本文详细介绍了在Spring框架中获取Bean的六种方法,包括通过读取XML文件反射生成对象、利用Spring工具类、继承特定抽象类、实现ApplicationContextAware接口及使用ContextLoader,帮助开发者深入理解Spring的依赖注入机制。

方法一:通过读取XML文件反射生成对象 
方法二:通过Spring提供的utils类获取ApplicationContext对象 
方法三:继承自抽象类ApplicationObjectSupport 
方法四:继承自抽象类WebApplicationObjectSupport 
方法五:实现接口ApplicationContextAware 
方法六:通过Spring提供的ContextLoader

获取spring中bean的方式总结: 

方法一:通过读取XML文件反射生成对象
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("userService");//比如:<bean id="userService" class="com.cloud.service.impl.UserServiceImpl"></bean>

说明:这样的方式适用于採用Spring框架的独立应用程序,须要程序通过配置文件手工初始化Spring的情况。

方法二:通过Spring提供的工具类获取ApplicationContext对象
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
ac2.getBean("beanId");

说明:这样的方式适合于Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象。然后在通过它获取须要的类实例。上面两个工具方式的差别是,前者在获取失败时抛出异常。后者返回null。

方法三:继承自抽象类ApplicationObjectSupport

说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法。能够方便的获取ApplicationContext。

Spring初始化时。会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。

方法四:继承自抽象类WebApplicationObjectSupport

说明:类似上面方法。调用getWebApplicationContext()获取WebApplicationContext

 
方法五:实现接口ApplicationContextAware

说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。Spring初始化时,会通过该方法将ApplicationContext对象注入。

下面是实现ApplicationContextAware接口方式的代码,前面两种方法类似:

public class SpringContextUtil implements ApplicationContextAware {  
  
    // Spring应用上下文环境  
    private static ApplicationContext applicationContext;  
  
    /** 
     * 实现ApplicationContextAware接口的回调方法。设置上下文环境 
     *  
     * @param applicationContext 
     */  
    public void setApplicationContext(ApplicationContext applicationContext) {  
        SpringContextUtil.applicationContext = applicationContext;  
    }  
  
    /** 
     * @return ApplicationContext 
     */  
    public static ApplicationContext getApplicationContext() {  
        return applicationContext;  
    }  
  
    /** 
     * 获取对象 
     *  
     * @param name 
     * @return Object
     * @throws BeansException 
     */  
    public static Object getBean(String name) throws BeansException {  
        return applicationContext.getBean(name);  
    }  
}

尽管,spring提供的后三种方法能够实如今普通的类中继承或实现对应的类或接口来获取spring 的ApplicationContext对象,可是在使用是一定要注意实现了这些类或接口的普通java类一定要在Spring 的配置文件applicationContext.xml文件里进行配置。否则获取的ApplicationContext对象将为null。

方法六:通过Spring提供的ContextLoader
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
wac.getBean(beanID);

最后提供一种不依赖于servlet,不须要注入的方式。可是须要注意一点,在server启动时。Spring容器初始化时,不能通过下面方法获取Spring 容器,细节能够查看spring源代码org.springframework.web.context.ContextLoader。

 

JUNIT测试时ContextLoader.getCurrentWebApplicationContext()=NULL

在JUNIT测试方法中加入以下代码,正式环境不用

MockServletContext sc = new MockServletContext("");
sc.addInitParameter(ContextLoader.CONFIG_LOCATION_PARAM, "/applicationContext.xml");
ServletContextListener listener = new ContextLoaderListener();
ServletContextEvent event = new ServletContextEvent(sc);
listener.contextInitialized(event);

转载于:https://www.cnblogs.com/aaron911/p/11432435.html

### Spring框架中定义Bean对象方式Spring框架中,Bean对象的定义方式主要分为三种:通过XML配置文件定义、通过注解定义以及通过Java配置类定义。以下是每种方式的具体描述: #### 1. XML配置文件定义Bean 在XML配置文件中,`<bean>`元素用于定义一个Bean对象。每个`<bean>`元素包含`id`或`name`属性(用于标识Bean)和`class`属性(指定Bean的实现类)。例如[^1]: ```xml <bean id="bean1" class="edu.cqie.ssm.bean1"/> <bean name="bean2" class="edu.cqie.ssm.bean2"/> ``` 上述示例中,`bean1`和`bean2`分别通过`id`和`name`属性定义了两个Bean对象。 #### 2. 注解方式定义Bean Spring框架支持通过注解来定义Bean对象。常用的注解包括`@Component`、`@Service`、`@Repository`和`@Controller`等。这些注解可以标记在类上,Spring容器会自动扫描并注册这些类为Bean对象。例如: ```java @Component("myBean") public class MyBean { // 类内容 } ``` 此外,还可以使用`@Bean`注解在方法上定义Bean对象。这种方式通常与`@Configuration`注解结合使用。例如: ```java @Configuration public class AppConfig { @Bean public MyBean myBean() { return new MyBean(); } } ``` #### 3. Java配置类定义Bean Java配置类是一种基于Java代码的配置方式,取代传统的XML配置文件。通过`@Configuration`注解标记的类,以及类中的`@Bean`注解标记的方法,可以定义Bean对象。例如: ```java @Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } } ``` 上述代码中,`myService`方法返回的对象将被注册为Spring容器中的一个Bean对象。 ### 获取Bean对象方式 除了定义Bean对象方式外,还需要注意获取Bean对象时的区别。例如,当使用FactoryBean时,可以通过`getBean("&userFactoryBean")`获取FactoryBean本身,而通过`getBean("userFactoryBean")`获取的是FactoryBean创建的对象[^2]。 ### 总结 Spring框架中定义Bean对象方式主要包括XML配置文件、注解和Java配置类三种方式。每种方式各有优缺点,开发人员可以根据项目需求选择合适的方式来定义Bean对象
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值