知识点
- Maven 介绍
- Spring 松耦合
Maven 简介
在项目开始之前,我们先来了解一下Maven相关知识。
Maven 是一个项目管理和综合工具。Maven 提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven 使用标准的目录结构和默认构建生命周期。
在多个开发团队环境时,Maven 可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven 让开发人员的工作更轻松,同时能够创建报表,检查、构建和测试自动化设置。
Maven提供了开发人员的方式来管理:
- Builds
- Documentation
- Reporting
- Dependencies
- SCMs
- Releases
- Distribution
- mailing list
概括地说,Maven简化和标准化项目建设过程,处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven增加可重用性并负责建立相关的任务。
导入 Maven 项目所需的包
由于 Maven 新建项目需要很多包,首先会扫描本地仓库,如果没有则需要联网,在中央仓库下载到本地仓库。
解压完成后,生成的 .M2 文件夹和之前我们解压的 apache-maven-3.3.9 同在目录,.m2 文件夹的默认是隐藏文件夹
创建 Maven 工程
打开 eclipse ,鼠标右键新建,other ,在里面可以找到 Maven 选项卡,点击 Maven Project , 点击 Next ,选择默认的工程位置,点击 Next。
创建普通的 maven 工程,
点击 Next 。
填写:
- Group Id:项目的组织机构,也是包的目录结构,一般都是域名的倒序,比如 com.shiyanlou.demo ;
- Atifact Id :项目实际的名字,比如 spring3-Example ;
- Packaging :可在 Group Id 后加 .Atifact Id;
- Version :项目版本号比如 0.0.1-SNAPSHOT。
这三个选项对应于自动生成的 pom 文件中相应的配置。
最后点击 Finish ,创建完成。
代码编写
1 创建 pom.xml
打开项目的 pom.xml ,进行Spring部署,如图:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.shiyanlou.demo</groupId>
<artifactId>spring3-Example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring3-Example</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring3 deploy -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.9.RELEASE</version>
</dependency>
</dependencies>
</project>
实际上,Maven 使用这三个值来唯一指定一个项目。引用一个库文件也是通过这三个值来确定所引用的库及其版本号,比如本例引用最新的 junit 库版本为 3.8.1. 此时假定 junit 还需引用其它库, Maven 自动管理而无需在 pom 文件中指定。
2 创建 HelloWorld.java
接下来,我们在项目名上右键再创建一个 Spring bean,首先创建一个包,包名为 com.shiyanlou.demo.helloworld :
再在该包内创建一个类,类名为 HelloWorld:
并将 HelloWorld.java 编辑如下:
package com.shiyanlou.demo.helloworld;
public class HelloWorld{
private String name;
public void setName(String n){
this.name=n;
}
/*
*创建打印Hello方法
*/
public void printHello(){
System.out.println("The first Spring 3:hello"+name);
}
}
3 创建 SpringBeans.xml
我们先在 src/main/ 下新建一个 Folder,命名为 resources,
现在可以开始创建 Spring Bean 配置文件,创建文件 SpringBeans.xml ,配置 bean 如下。文件位于 src/main/resources 下。
编辑 SpringBeans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="helloBean" class="com.shiyanlou.demo.helloworld.HelloWorld">
<property name="name" value="shiyanlou" />
</bean>
</beans>
4 创建测试 App
在 com.shiyanlou.demo.spring3_Example 包下创建一个类,类名为 App:
package com.shiyanlou.demo.spring3_Example;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.shiyanlou.demo.helloworld.HelloWorld;
public class App {
private static ApplicationContext context;
public static void main( String[] args )
{
context = new ClassPathXmlApplicationContext("SpringBeans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloBean");
obj.printHello();
}
}
5 松耦合代码编写
5.1 IOutputGenerator.java
创建 com.shiyanlou.demo.loosely_coupled 包,新建一个一个 IOutputGenerator 接口:
接口内容如下:
package com.shiyanlou.demo.loosely_coupled;
public interface IOutputGenerator {
public void generateOutput();
}
5.2 CsvOutputGenerator.java
CVS 输出,实现了IOutputGenerator 接口。
内容如下:
package com.shiyanlou.demo.loosely_coupled;
public class CsvOutputGenerator implements IOutputGenerator {
public void generateOutput() {
System.out.println("Creating CsvOutputGenerator Output......");
}
}
5.3 JsonOutputGenerator.java
JSON 输出,实现了 IOutputGenerator 接口,
内容如下:
package com.shiyanlou.demo.loosely_coupled;
public class JsonOutputGenerator implements IOutputGenerator {
public void generateOutput() {
System.out.println("Creating JsonOutputGenerator Output......");
}
}
6 用 Spring 依赖注入调用输出
用 Spring 的松耦合实现输出相应的格式。
首先在 com.shiyanlou.demo.loosely_coupled 包内创建一个需要用到输出的类 OutputHelper.java ,内容如下:
package com.shiyanlou.demo.loosely_coupled;
public class OutputHelper {
IOutputGenerator outputGenerator;
public void generateOutput(){
this.outputGenerator.generateOutput();
}
public void setOutputGenerator(IOutputGenerator outputGenerator){
this.outputGenerator = outputGenerator;
}
}
7 创建一个 spring 配置文件
此文件用于依赖管理 src/main/resources 下创建配置文件 Spring-Output.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="OutputHelper" class="com.shiyanlou.demo.loosely_coupled.OutputHelper">
<property name="outputGenerator" ref="CsvOutputGenerator" />
</bean>
<bean id="CsvOutputGenerator" class="com.shiyanlou.demo.loosely_coupled.CsvOutputGenerator" />
<bean id="JsonOutputGenerator" class="com.shiyanlou.demo.loosely_coupled.JsonOutputGenerator" />
</beans>
8 App.java
此文件用于通过 Spring 调用相应的 output ,内容如下:
package com.shiyanlou.demo.spring3_Example;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.shiyanlou.demo.loosely_coupled.OutputHelper;
public class App {
private static ApplicationContext context;
public static void main( String[] args )
{
context = new ClassPathXmlApplicationContext(new String[] {"Spring-Output.xml"});
OutputHelper output = (OutputHelper)context.getBean("OutputHelper");
output.generateOutput();
}
}
现在,已经实现了松耦合,当需要输出改变时,不必修改任何代码 .java 文件,只要修改 Spring-Output.xml 文件 <property name="outputGenerator" ref="CsvOutputGenerator" />
中的 ref 值,就可以实现输出不同的内容,不修改代码就减少了出错的可能性。
9 运行结果
当 Spring-Output 如下时:
<bean id="OutputHelper" class="com.shiyanlou.demo.loosely_coupled.OutputHelper">
<property name="outputGenerator" ref="CsvOutputGenerator" />
</bean>
运行结果为:
当 Spring-Output 如下时:
<bean id="OutputHelper" class="com.shiyanlou.demo.loosely_coupled.OutputHelper">
<property name="outputGenerator" ref="JsonOutputGenerator" />
</bean>
运行结果为: