作者:区小靜 | 来源:互联网 | 2023-06-04 09:01
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。
一.用maven引入spring包,pom.xml如下
4.0.0com.practiceannotation0.0.1-SNAPSHOTjarannotationhttp://maven.apache.orgUTF-8 4.0.2.RELEASE junitjunit4.11test org.springframework spring-core ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-oxm ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-jdbc ${spring.version} org.springframework spring-webmvc ${spring.version} org.springframework spring-aop ${spring.version} org.springframework spring-context-support ${spring.version} org.springframework spring-test ${spring.version}
下面介绍如何利用spring注入变量。
我想要把多个配置文件中的数据注入到config对象中。
有两个配置文件:
jmq.properties
mq.producer.topic=wlogin_monitor
mq.epoll=false
module.properties
redis-key-1 = mon_login
redis-node-1 = 192.168.144.119:6379|192.168.144.120:6379redis-key-2 = mon_register
redis-node-2 = 192.168.144.119:6379|192.168.144.120:6379
二.用XML方式注入变量
把上述数据注入到LocalConf对象实例中,该类必须要有get,set方法。
mq.producer.topic注入到topic变量中,redis相关数据注入到modules变量中。
public class LocalConf {private String topic;private Map modules;public Map getModules() {return modules;}public void setModules(Map modules) {this.modules = modules;}public String getTopic() {return topic;}public void setTopic(String topic) {this.topic = topic;}
}
spring的配置文件如下:
classpath:conf/jmq.propertiesclasspath:conf/module.properties
主函数获取spring装配的对象实例:
ApplicationContext context = new ClassPathXmlApplicationContext (new String[]{"conf/spring-producer.xml"});
LocalConf localConf = (LocalConf)context.getBean("localConf");
就是这么简单!spring可以注入Java的各种容器,list,map,set等等。
三. 用Spring注解的方式
1.spring配置文件
classpath*:*.properties
注意:这里用注解的方式来配置注入bean,所以xml的配置变得非常简单。
但是如果复杂的变量类型,如上文中map类型,还是只能用xml方式的注入变量。
2.测试类
package com.practice.annotation;import java.util.Map;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring.xml"})public class App
{@Value("#{configProperties['mq.producer.topic']}")private String topic;@Value("#{configProperties['mq.epoll']}")private Boolean epoll;@Value("#{configProperties}")private Map properties;@Testpublic void test(){System.out.println("topic="+topic);System.out.println("epoll="+epoll);System.out.println(properties);}
}
打印结果:
topic=wlogin_monitor
epoll=false
{redis-key-2=mon_register, mq.epoll=false, redis-node-2=192.168.144.119:6379|192.168.144.120:6379, redis-key-1=mon_login , redis-node-1=192.168.144.119:6379|192.168.144.120:6379 , providerName=Eclipse.org, pluginName=Java Development Tools JUnit Runtime Support, mq.producer.topic=wlogin_monitor}
这里providerName和pluginName变量也打印了,是因为spring.xml中引入的配置文件是classpath*,即在整个项目目录下搜索所有的properties文件。