目录
Spring
简介
Spring是通过解耦的方式降低企业开发应用复杂度的一个框架,解耦方式分为两大类:IoC和AOP。
IoC(控制反转)
IoC是一种思想。目前流行的实现方式有两种,依赖注入(Dependency Injection)和依赖查找(Dependency Lookup)。IoC思想可以理解为将对象的控制权交给第三方,由第三方管理,第三方也就是spring容器。 这个容器创建的对象,默认是单例模式。这样的话,当前类只需要负责调用其他对象,实现解耦。
AOP(面向切面编程)
AOP是一种编程思想,是在面向对象编程思想上的扩展。一个项目中,有主业务逻辑以及系统级业务逻辑, 主业务指的是当前应用的实际业务,如登录,注册,有实际的应用场景,复用性较低。系统级业务指的是为主业务提供系统级服务,如日志,数据库操作,复用性较高,称为一个切面。所以Spring将这些系统级业务整合在一起,在主业务中只需负责调用,实现解耦。
创建一个Spring应用程序
创建pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<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.domain</groupId>
<artifactId>hello-spring</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.17.RELEASE</version>
</dependency>
</dependencies>
</project>
- version中的SNAPSHOT指的是快照版,也就是并不是正式发布版,每次版本更新后,都会下拉版本最新代码。
- packaging指的是打包方式
创建接口和实现接口
创建UserService接口
package com.domain.hello.spring.service;
public interface UserService {
public void sayHi();
}
创建UserServiceImpl 实现
package com.domain.hello.spring.service.impl;
import com.domain.hello.spring.service.UserService;
public class UserServiceImpl implements UserService {
public void sayHi() {
System.out.println("Hello Spring");
}
}
创建 Spring 的配置文件
在 src/main/resources
目录下创建 spring-context.xml
配置文件,从现在开始类的实例化工作交给 Spring 容器管理(IoC),配置文件如下:
<?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.xsd">
<bean id="userService" class="com.domain.hello.spring.service.impl.UserServiceImpl" />
</beans>
-
<bean />
:用于定义一个实例对象。一个实例对应一个 bean 元素。 -
id
:该属性是 Bean 实例的唯一标识,程序通过 id 属性访问 Bean,Bean 与 Bean 间的依赖关系也是通过 id 属性关联的。 -
class
:指定该 Bean 所属的类,注意这里只能是类,不能是接口。
测试 Spring IoC
创建一个 MyTest 测试类,测试对象是否能够通过 Spring 来创建,代码如下:
package com.domain.hello.spring;
import com.domain.hello.spring.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args) {
// 获取 Spring 容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");
// 从 Spring 容器中获取对象
UserService userService = (UserService) applicationContext.getBean("userService");
userService.sayHi();
}
}