1. 程式人生 > >spring 中通過ApplicationContext getBean獲取注入物件

spring 中通過ApplicationContext getBean獲取注入物件

用SpringContextUtil實現ApplicationContextAware
package util;

import java.util.Locale;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class SpringContextUtil
  implements ApplicationContextAware
{
  private static ApplicationContext context;

  @Override
  public void setApplicationContext(ApplicationContext contex)
    throws BeansException
  {
	  System.out.println("--------------------contex---------"+contex);
	  SpringContextUtil.context = contex;
  }
  
  
  public static ApplicationContext getApplicationContext() { 
      return context; 
  } 
  
  public static Object getBean(String beanName) {
    return context.getBean(beanName);
  }

  public static String getMessage(String key) {
    return context.getMessage(key, null, Locale.getDefault());
  }
}
工具類
package redis;

import redis.clients.jedis.JedisPool;
import util.SpringContextUtil;

public class RedisUtil {

	
	 private static JedisPool jedisPool;
	 
	 static{
		 jedisPool = (JedisPool)SpringContextUtil.getBean("jedisPool"); 
	 }
	  
	  public static JedisPool getJedisPool(){
		  if(jedisPool == null){
			  jedisPool = (JedisPool)SpringContextUtil.getBean("jedisPool"); 
		  }
		  return jedisPool;
	  }
	  
	  public void flusDB(){
		  jedisPool.getResource().flushDB();
	  }
	  
	  
	  public static String set(String key,String value){
		  return jedisPool.getResource().set(key, value);
	  }
	  
	  public static String get(String key){
		  return jedisPool.getResource().get(key);
	  }
	
	  
	  public static Long del(String key){
		  return jedisPool.getResource().del(key);
	  }
	  
}
在Spring的配置檔案中配置這個類,Spring容器會在載入完Spring容器後把上下文物件呼叫這個物件中的setApplicationContext方法
<!--1 自動掃描 將標註Spring註解的類自動轉化Bean-->  
  <context:component-scan base-package="com.first,com.util" /> 
  
  <!--2 載入資料資源屬性檔案 -->  
  <bean id="propertyConfigurer"  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
    <property name="locations">
    	<list>
    		<value>classpath:jdbc.properties</value>
    		<value>classpath:redis.properties</value>
    	</list>
    </property>
  </bean> 
  
  <bean id="springContextUtil" class="util.SpringContextUtil"></bean>
  <import resource="redis-config.xml"/>
在web專案中的web.xml中配置載入Spring容器的Listener
<!-- 初始化Spring容器,讓Spring容器隨Web應用的啟動而自動啟動 --> 
<listener> 
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener>
spring配置檔案注入Bean類
  <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="300" /> <!-- 最大能夠保持idel狀態的物件數  -->
        <property name="testOnBorrow" value="true" /> <!-- 當呼叫borrow Object方法時,是否進行有效性檢查 -->
        
        <property name="maxActive" value="200" />  
        <property name="minIdle" value="10"/> 
         <property name="maxWait" value="300" />  
          <property name="testOnReturn" value="true" />  
          <property name="testWhileIdle" value="true" />  
    </bean>
    
    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="poolConfig" ref="jedisPoolConfig" />
        <constructor-arg name="host" value="${redis_addr}" />
        <constructor-arg name="port" value="${redis_port}" type="int" />
        <constructor-arg name="timeout" value="${redis_timeout}" type="int" />
        <constructor-arg name="password" value="#{'${redis_password}'!=''?'${redis_password}':null}" />
        <constructor-arg name="database" value="${redis_db_index}" type="int" />
    </bean>