spring 中通過ApplicationContext getBean獲取注入物件
阿新 • • 發佈:2018-12-31
用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()); } }
在Spring的配置檔案中配置這個類,Spring容器會在載入完Spring容器後把上下文物件呼叫這個物件中的setApplicationContext方法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); } }
在web專案中的web.xml中配置載入Spring容器的Listener<!--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"/>
<!-- 初始化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>