- Spring
- 1、Spring框架的引言
- 2、Spring框架的核心作用
- 3、spring第一个程序
- 4、Spring框架中的核心思想
- 4.1、IOC
spring(春天),生于在2002年,由Rod Johnson创作。Spring框架是一个集众多设计模式于一身的开源的、轻量级的项目管理框架。致力于JAVAEE 轻量级解决方案。相对于原来学过的框架而言,spring框架和之前学习的 struts2 、 mybatis 框架有了本质的区别,不是替换原来的某个框架,而是对其进行整合管理。
轻量级解决方案:提供一个以简单的、统一的、高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。
2、Spring框架的核心作用 Spring 框架用来 管理 [创建|使用|销毁] 项目中的组件,由于spring 框架可以帮我们生产项目中组件对象,因此也习惯称spring是一
个工厂|容器。
组件:项目中的service,dao,controller,都是项目中的组件
注意:spring框架通常不管理对实体类对象(entry)创建
3、spring第一个程序1、引入依赖
org.springframework spring-core4.3.2.RELEASE org.springframework spring-beans4.3.2.RELEASE org.springframework spring-web4.3.2.RELEASE org.springframework spring-expression4.3.2.RELEASE org.springframework spring-aop4.3.2.RELEASE org.springframework spring-context4.3.2.RELEASE org.springframework spring-context-support4.3.2.RELEASE org.springframework spring-aspects4.3.2.RELEASE org.springframework spring-jdbc4.3.2.RELEASE
2、创建组件
public interface UserDAO{ void save(String name); }
public class UserDAOImpl implements UserDAO{ @Override public void save(String name){ System.out.println("姓名:"+name); } }
3、添加配置文件
配置文件名称: 任意名称 (默认 spring.xml)
配置文件位置: 本项目中resources目录下
4、启动工厂测试
public class TestSpring{ public static void main(String[] args) { //启动工厂 ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); //获取工厂中创建好的对象 参数:获取工厂中指定对应的唯一标识 UserDAO userDAO = (UserDAO) context.getBean("aa"); userDAO.save("小黑"); } }4、Spring框架中的核心思想 4.1、IOC
Inversion of Controll 控制反转
将对象的创建由原来(new)的方式转移到配置文件中,交给spring ,通过在配置文件中配置bean标签形式创建对象,由spring创建对象过程
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); UserDAO userDAO = (UserDAO) context.getBean("aa"); userDAO.save("小黑"); CityDAO cityDAO = (CityDAO) context.getBean("aa"); ciryDAO.delete("1"); }
当bean对象多了之后,ioc的好处变体现出来了
问题来了:我们可以把service对象也通过bean管理,但是在service中需要调用dao层对象,怎么办呢???
**DI(dependcy Injection)**依赖注入
定义: 为组件中成员变量完成赋值过程 这个过程称之为 依赖注入
public interface DeptService{ void save(String name); } public class DeptServiceImpl implements DeptService{ // 需要的组件 private DeptDAO deptDAO; public void setDeptDAO(DeptDAO deptDAO){ this.deptDAO=deptDAO; } @Override public void save(String name){ System.out.println("deptService 姓名:"+name); deptDAO.save(name); } }
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); DeptService deptService = (DeptService) context.getBean("deptService"); deptService.save("小黑"); }
**IOC 全部概述:**控制反转 就是通过原来手动通过new关键字创建对象的权力交给spring,由spring工厂创建对象的过程,当然spring不仅要创建对象还要在创建对象的同时通过DI的方式维护组件与组件的调用关系
spring中注入方式
- set 注入 使用成员变量set方式形式进行赋值
- 构造注入 使用构造方法形式进行属性的赋值
- 自动注入 就是通过在配置文件中完成类中属性自动赋值
spring中set方式的注入语法
- set注入: 使用类中的属性set方法为属性完成赋值的过程
- set注入相关语法
public interface DeptService{ void save(String name); } public class DeptServiceImpl implements DeptService{ // 需要的组件 private DeptDAO deptDAO; private String name; private Integer age; public void setName(String name){ this.name=name; } public void setDeptDAO(DeptDAO deptDAO){ this.deptDAO=deptDAO; } @Override public void save(String name){ System.out.println("deptService 姓名:"+name); deptDAO.save(name); System.out.println("Name:"+ this.name); } }
小陈 大
看书 睡觉 打游戏 com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/test root 123456
spring中构造注入
使用类中构造方法为类中成员变量赋值过程, 称之为构造注入
缺点:需要有对应的构造方法
spring中自动注入
在spring工厂配置文件中通过制定自动注入方式 开启组件属性的自动赋值
注意:
- 底层使用原理也是set方式注入
- 自动注入需要在对应组件标签开启才能使用
- 只用于引用类型的注入|对应类型|组件类型的注入
自动注入语法
- 需要谁将谁声明为成员变量,并提供set方法
- 在对应组件标签汇总加入autowired 属性并制定自动注入方式即可完成注入
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)