1 博客课程内容简述
关于Spring的简介请移步Spring官网或者我的另一篇博客Spring简介进行查看,这篇博客内容主要介绍Spring IOC 快速入门,让你通过简单的代码快速了解Spring IOC 到底是一个什么东东。
2 Spring maven环境的搭建
第一步引入我们spring的核心依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
然后在引入日志和测试相关的依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.10</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>runtime</scope>
</dependency>
<!-- Test Artifacts -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.4.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
在/springexamples/src/main/resources/下创建log4j.properties 内容如下:
log4j.rootCategory=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %40.40c:%4L - %m%n
在 /springexamples/src/main/resources/下创建Spring 配置文件ioc-helloworld-context.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd ">
</beans>
3 IOC 之xml版本
首先创建我们的测试类 IocHelloWorldXml 里面有一个方法say() 输入内容为:xml hello word… 具体内容如下:
package cn.zhuoqianmingyue.ioc;
public class IocHelloWorldXml {
public void say() {
System.out.println("xml hello word....");
}
}
在spring配置文件中通过添加bean来配置我们的测试类具体方式如下:
<bean id="iocHelloWorldXml" class="cn.zhuoqianmingyue.ioc.IocHelloWorldXml"></bean>
id: 是获取bean的唯一标识 同一个配置文件中不允许出现相同id的bean
class:指定bean的类路径。
测试我们的配置是否生效:
需要说明的是通过ClassPathXmlApplicationContext 来获取我们的上下文对象(ApplicationContext)需要将spring的配置文件(ioc-helloworld-context.xml)放在src 目录下。
测试类的具体代码如下:
public class IocHelloWorldNotAnnotationTest {
private static Logger log = LoggerFactory.getLogger(IocHelloWorldNotAnnotationTest.class);
ApplicationContext appliction = null;
@Before
public void initApplication() {
appliction = new ClassPathXmlApplicationContext("ioc-helloworld-context.xml");
}
@Test
public void classPathXml() {
IocHelloWorldXml iocHelloWorld = (IocHelloWorldXml)appliction.getBean("iocHelloWorldXml");
iocHelloWorld.say();
IocHelloWorldAnnotation iocHelloWorldAnnotation = (IocHelloWorldAnnotation)appliction.getBean("iocHelloWorldAnnotation");
iocHelloWorldAnnotation.say();
}
测试结果:
4 IOC 之 注解版本
注解版相对与配置版更为简单首先在我们定义的测试类上声明@Component()注解然后为其制定名称 例如:@Component(“iocHelloWorldAnnotation”) 这里的iocHelloWorldAnnotation和下图中是相同的。
具体代码如下:
@Component("iocHelloWorldAnnotation")
public class IocHelloWorldAnnotation {
public void say() {
System.out.println("annotation hello word....");
}
}
第二就是需要在spring的配置文件中添加 注解扫描的范围具体代码如下:
<context:component-scan base-package="cn.zhuoqianmingyue"></context:component-scan>
完成上面2步我们的IOC注解版本就搞定啦 接下来进行测试我们的注解配置,具体测试代码如下:
@Test
public void classPathXml() {
IocHelloWorldAnnotation iocHelloWorldAnnotation = (IocHelloWorldAnnotation)appliction.getBean("iocHelloWorldAnnotation");
iocHelloWorldAnnotation.say();
}
5 FileSystemXmlApplicationContext 和ClassPathXmlApplicationContext 的区别
我们上面已经通过ClassPathXmlApplicationContext 方式来获取Spirng上下文对象 我们也可以通过FileSystemXmlApplicationContext 来获取Spirng上下文对象方式和ClassPathXmlApplicationContext 一样。具体的区别如下
- FileSystemXmlApplicationContext 获取的是工程目录下的spring配置文件
- ClassPathXmlApplicationContext 获取的是src 目录下的spring配置文件
6 通过注解的方式进行Spring 上下文测试
关于上下文对象获取测试Spring为我们提供注解的方式,相对于上面通过 ClassPathXmlApplicationContext 更为简便一点。具体操作如下:
1 编写测试类 然后在测试类上声明@RunWith(SpringRunner.class) 标签 然后在声明@ContextConfiguration 来制定要加载的配置文件,
@RunWith(SpringRunner.class)
@ContextConfiguration(locations= {"classpath:ioc-helloworld-context.xml"})
public class IocHelloWorldAnnotationTest {......}
2 通过@Autowired 将声明的bean注入到测试类中
public class IocHelloWorldAnnotationTest {.
@Autowired
private IocHelloWorldXml iocHelloWorldXml;
.......
}
3 调用声明的bean 进行测试
@Test
public void sayXml() {
iocHelloWorldXml.say();
}
到此为止我们的Spring IOC(控制反转)helloword 演示完毕,觉得鄙人写的还行就给点个赞呗。 后面我们将详细介绍IOC 相关的内容。