Spring入门案例
Spring简介
Spring是什么
Spring是一个IOC(控制反转)和AOP(面向切面编程)为内核的轻量级容器框架。Spring使得创建java企业级应用变得容易,提供了在企业环境中使用Java语言所需的一起,可以根据应用程序的需求灵活地创建多种体系结构。
Spring核心
- IOC
- AOP
Spring优势
- 轻量级
- 声明式事务支持
- 方便程序测试
- 方便集成优秀框架
Spring体系结构

程序的耦合和解耦
-
耦合:程序之间依赖关系
-
解耦:降低程序间依赖
解决思路: 编译期间不依赖、运行时才依赖
- 通过配置文件的方式,来获取要使用的对象全限定类型
- 程序中使用反射机制创建对象,避免使用
new关键字创建对象
-
解决思路
工厂模式解耦:DEMOSpring的IOC
Spring入门案例
-
创建maven工程
-
配置依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> </dependency> </dependencies> -
创建包目录

-
创建
Spring配置文件ApplicationContext.xml把对象交给
Spring来管理;id: 唯一标识class:全限定类名<?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"> <!-- 把对象的创建交给spring来管理 每一个bean代表一个对象 id : 唯一标识 class: 全限定类名 --> <bean id="userService" class="com.wh.service.impl.UserService"></bean> <bean id="userDao" class="com.wh.dao.impl.UserDao"></bean> </beans> -
从
Spring容器中获取对象并使用import com.wh.service.IUserService; import com.wh.service.impl.UserServiceImpl; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestUserCRUD { public static void main(String[] args) { // 1. 通过资源路径获取ApplicationContext 获取核心容器 ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); // 2. 通过唯一标识获取对象 IUserService userService = context.getBean("userService", UserServiceImpl.class); userService.createUser(); } }
ApplicationContext
ApplicationContext是一个维护bean定义以及相互依赖的注册表的高级工厂的接口, 通过T getBean(String name, Class<T> requiredType) 可以获取对象实例。
ApplicationContext支持不同的配置源读取bean定义
ClassPathXmlApplicationContext:可以加载类路径下的xml文件FileSystemXmlApplicationContext:可以加载磁盘任意位置的配置文件(必须要有访问权限)AnnotationConfigApplicationContext:读取注解配置的容器
Bean总览
1. Bean标签
1. Bean的作用范围和生命周期
-
bean标签中的scope属性可以控制Bean的生命周期singleton: 单例prototype:多例request:将对象放入request域中session:将对象放入session域中global session: 将对象放入集群的会话作用域范围中
-
单例和多例区别
- 单例: 每个应用只有一个该对象的实例,它的作用范围就是整个应用; 单例对象的创建与销毁 和 容器的创建与销毁时机一致
- 对象出生: 当应用加载,创建容器时,对象就被创建
- 对象活着: 只要容器存在,对象一直活着
- 对象死亡: 当应用卸载,销毁容器时,对象就被销毁
- 多例:每次访问对象,都会创建一个新实例; 多例对象的创建与销毁时机不受容器控制
- 对象出生: 当使用对象时,创建新的对象实例
- 对象活着: 只要对象在使用中,就一直活着
- 对象死亡: 当对象长时间不用时,被 java 的垃圾回收器回收了
- 单例: 每个应用只有一个该对象的实例,它的作用范围就是整个应用; 单例对象的创建与销毁 和 容器的创建与销毁时机一致
2. 实例化Bean的三种方式
-
使用默认无参构造函数创建对象
<bean id="userService" class="com.wh.service.impl.UserServiceImpl"></bean>
-
使用静态工厂方法创建对象
package com.wh.factory; import com.wh.service.IUserService; import com.wh.service.impl.UserServiceImpl; public class StaticFactory { public static IUserService createUserService(){ return new UserServiceImpl(); } }<!--使用静态工厂创建userService--> <!--com.wh.factory.StaticFactory: 静态工厂全限定类名--> <!--createUserService: 静态工厂名--> <bean id="userService" class="com.wh.factory.StaticFactory" factory-method="createUserService"> </bean> -
使用实例工厂方法创建对象
package com.wh.factory;
import com.wh.service.IUserService;
import com.wh.service.impl.UserServiceImpl;
public class InstanceFactory {
public IUserService createUserService(){
return new UserServiceImpl();
}
}
<!--定义实例工厂全限定类名-->
<bean id="instanceFactory" class="com.wh.factory.InstanceFactory"></bean>
<bean id="userService"
factory-bean="instanceFactory"
factory-method="createUserService">
</bean>
来源:https://www.cnblogs.com/weicunheng/p/12637148.html
