0 概述
spring bean对象可以通过@Autowired 或者@Resource等注解方式获取;spring配置值可以通过@Value注解获取。通过注解方式获取很方便,但是有一定局限 。本文主要介绍通过非注解的方法获取bean对象以及配置方法。
1 获取bean 对象
获取bean 对象主要是获取Spring 容器的上下文
package com.hsc.spring.study.context;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* Created by hsc on 17/4/9.
*/
@Component
public class SpringContext implements ApplicationContextAware{
//Spring应用上下文环境
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContext.applicationContext = applicationContext;
}
/**
* 获取对象
*
* @param name
* @return Object 一个以所给名字注册的bean的实例
* @throws BeansException
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
}
SpringContext 生成bean对象后,就可以使用静态方法获取bean对象了。
2 获取 配置值
package com.hsc.spring.study.context;
import org.springframework.context.EmbeddedValueResolverAware;
import org.springframework.stereotype.Component;
import org.springframework.util.StringValueResolver;
/**
* Created by hsc on 17/4/9.
*/
@Component
public class PropertiesUtils implements EmbeddedValueResolverAware {
private static StringValueResolver valueResolver;
@Override
public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
this.valueResolver = stringValueResolver;
}
public static String getPropertiesValue(String name) {
return valueResolver.resolveStringValue(name);
}
}
值得强调是:获取配置值键要使用如下写法${key}
3 实例
spring-test.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.hsc.spring.study"/>
<bean id="cachePropertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="order" value="2" />
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="locations">
<list>
<value>classpath*:config.properties</value>
</list>
</property>
</bean>
</beans>
config.properties 配置文件
auth_key=hsc
测试程序
import com.hsc.spring.study.context.PropertiesUtils;
import com.hsc.spring.study.context.SpringContext;
import com.hsc.spring.study.entity.User;
import com.hsc.spring.study.service.test.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by hsc on 17/4/9.
*/
public class Test {
public static void main(String[] args) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-test.xml");
UserService userService = (UserService) SpringContext.getBean("userService");
User user = userService.getUserByName("test");
System.out.println(user.getName());
System.out.println(PropertiesUtils.getPropertiesValue("${auth_key}"));
}
}