感觉spring 有必要重新学习一遍。这是个大坑。 介于我还是个经验尚浅的人,写博客是为了提高自己。
撒~始めましょうか。。。
环境:windows + tomcat8 + eclipsejavaee + maven + spring4.0.2
不用maven的话太费劲。
一 :引依赖。
<properties>
<org.springframework.version>4.0.2.RELEASE</org.springframework.version>
</properties>
<dependencies>
<span style="white-space:pre"> </span><dependency>
<span style="white-space:pre"> </span> <groupId>org.springframework</groupId>
<span style="white-space:pre"> </span> <artifactId>spring-context</artifactId>
<span style="white-space:pre"> </span> <version>${org.springframework.version}</version>
<span style="white-space:pre"> </span> <scope>runtime</scope>
<span style="white-space:pre"> </span></dependency>
<span style="white-space:pre"> </span><dependency>
<span style="white-space:pre"> </span><groupId>org.springframework</groupId>
<span style="white-space:pre"> </span><artifactId>spring-core</artifactId>
<span style="white-space:pre"> </span><version>${org.springframework.version}</version>
<span style="white-space:pre"> </span></dependency>
<span style="white-space:pre"> </span><dependency>
<span style="white-space:pre"> </span><groupId>org.springframework</groupId>
<span style="white-space:pre"> </span><artifactId>spring-beans</artifactId>
<span style="white-space:pre"> </span><version>${org.springframework.version}</version>
<span style="white-space:pre"> </span></dependency>
</dependencies>
version引用properties。便于更换版本。 在properties中配置的标签 在其他地方可以使用$符号进行引用,一些通用配置都可以这么玩。。
好了 环境搭好了 开始测试吧
没错 直接开始测试,还没到web 所以不需要配置web.xml 原先一想到spring 就想到web.xml中配置listener 等等。。不需要!其实脱离web ,spring 照样干。
二 :写测试类。
package per.hps.test1;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration()
public class SpringTest {
}
在没引spring-test和junit之前肯定没有几个注解嘛。美味可口的依赖在下面。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework.version}</version>
</dependency>
(话说选java样式和xml样式一样嘛。。。)
关于pom文件的上面那个<scope> 我只知道和作用环境有关,比如上面那个jar好像只有在测试的时候才会加载。不管了,有空我会专门研究的。。
三:一种新的扫描方式 JavaConfig(对我来说是新的,因为我没用过,据说比xml要强大,我看书上外国人说的,可以条件化创建bean)
new 一个class 起名 SpringConfigDemo.java
@Configuration
@ComponentScan
public class SpringConfigDemo {
}
为了省空子我就不辅助import和package了。
第一个注解:表明该类是一个配置类 说明了该类应该包涵了project创建bean的一些细节。
第二个注解:表明spring将从该类所在的包极其包下进行扫描,就是在xml当中配置的那个注解扫描(以后会记下来的)。 一个道理。
这厢~ 还能指定某个包。则表示扫描该包极其子包下all。
为了一试 我们再new个class 在这个包下。
@Component
public class SpringTestBean {
public void haha(){
System.out.println("やめて!!");
}
}
为了测试 写个方法 输出个语句(咳咳。意思不说了。)
注解@Component : 意思表示该类会被spring搜到。 并且 会为其创建bean 至于id 如果没有指定的话 默认就是类名小写首字母。
我已经迫不及待的想试一下啦。。回到测试类。
修改一下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfigDemo.class)
public class SpringTest {
@Autowired
private SpringTestBean springTestBean;
@Test
public void test(){
this.springTestBean.haha();
}
}
在第二个注解上指定配置类。这样spring就会去找那个配置类了。
然后那个配置类声明了需找所在包极其子包下的所有bean。 然后就找到了 加@Component的bean。 然后就把他加载近了spring的上下文中。
这边声明一个字段 springTestBean 还记得spring的默认id吗? 如果不额外指定的话必须一致。 然后再加一个@Autowired注解
关于注解 我会抽时间总结一篇的。
@Test注解 单元测试不多说
执行haha方法 测试成功。。
(由于太晚了,先到这,明天继续,明天会系统一些,今天只是小试牛刀。)
总结:
老是被固有思想所束缚。不懂得变通。万物回归本源都很简单,就看能不能看透了。原先一直以为spring脱离了xml就不能玩了。知道我学会了这个。
可能会觉得小儿科,但是对我来说还有有帮助的。。