Spring概述
什么是Spring
Spring 是分层的 Java SE/EE 应用 full-stack (一站式)轻量级开源框架,以 IoC(Inverse Of Control: 反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多 著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。
Spring 框架的优点
- 非侵入式设计
- 方便解耦、简化开发
- 支持aop
- 支持声明式事务处理
- 方便程序测试
- 方便集成各种优秀框架
- 降低Java EE API的使用难度
Spring的体系结构
CoreContainer(核心容器)
Spring的核心容器提供了两种核心容器,分别为BeanFactory和ApplicationContext:
-
BeanFactory
在实际开发中应用不多仅此了解即可
BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource(配置文件的路径));
-
ApplicationContext
- 通过ClassPathXmlApplicationContext 创建
ApplicationContext applicationContext = new ClassPatXmlApplicationContext(配置文件的路径);
-
通过FileSystemXmlApplicationContext 创建
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(配置文件的路径)
Spring 的核心容器是其他模块建立的基础,它主要由Beans模块、Core模块、Context模块、Context-support模块和SpEl(Spring Expression Language , spring语言表达式):
- Beans 模块:提供了BeansFactroy,是工厂模式的经典实现,Spring将管理对象称为对象
- Core 核心模块:提供了Spring框架的基本组成部分,包括Ioc 和 DI功能
- Context 上下文模块:建立在Core、Beans模块的基础之上,他是访问定义和配置任何对象的媒介。其中ApplicationContext 接口是上下文模块的焦点
- Context-support 模块:提供了对第三方库的嵌入Spring应用的集成支持
Data Access/Integration (数据访问/集成)
依赖注入(Dependenc Injection)
依赖注入的实现方式有两种分别是:属性setter方法注入、构造方法注入。
-
属性setter方法注入:指Spring容器使用 setter 方法注入被依赖的实例。通过调用无参构造器或无参静态工厂方法实例化Bean 后,调用该Bean 的setter 方法,即可实现基于setter 方法的依赖注入。
-
构造方法的注入:指 Spring容器中使用构造方法注入被依赖的实例。基于构造方法的依赖注入通过调用带参数的构造方法来实现,每一个参数代表着一个依赖。
创建接口:
package com.itheima.ioc; public interface UserService { public void say(); }
package com.itheima.ioc; public interface UserDao { public void say(); }
创建接口的实现类:
package com.itheima.ioc; public class UserServiceImpl implements UserService { private UserDao userDao; //添加UserDao的属性的setter方法,实现依赖注入 public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void say() { // TODO Auto-generated method stub //调用userDao中的say方法 this.userDao.say(); System.out.println("UserService say Hello World"); } }
package com.itheima.ioc; public class UserDaoImpl implements UserDao { public void say() { System.out.println("UserDao say Hello World"); } }
设置配置文件:
<?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,让spring创建其实例化对象 --> <bean id = "userDao" class = "com.itheima.ioc.UserDaoImpl"></bean> <bean id = "userService" class = "com.itheima.ioc.UserServiceImpl" > <property name = "userDao" ref = "userDao"></property> </bean> </beans>
创建测试类:
package com.itheima.ioc; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.support.AbstractApplicationContext; public class TestDI { public static void main(String[] args) { //初始化spring容器,加载配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //通过容器获取对象, UserService userService = (UserService) applicationContext.getBean("userService"); //对象调用say方法 userService.say(); ((AbstractApplicationContext)applicationContext).close(); } }
运行结果:
在校学习生,不定时更新。还请各位看官谅解。
(参考书籍:JAVA EE 企业级应用开发教程(Spring+SpringMVC+MyBatis))