java 详解 搭建 框架_Spring框架概述,搭建项目配置详解

Spring----01----概述&&配置详解

1. Spring框架

c56bae2e12899eee0e87cd49b4ff63f0.png

Spring框架的作用范围横跨项目的三层;

Spring是项目中对象的管家;

2003年由Rob Johnson创建。

2. Spring框架搭建

2.1 导入依赖

org.springframeworkspring-context5.2.6.RELEASE

2.2 创建一个类

public class User { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }

2.3 创建Spring配置文件

规范:Spring官方没有对配置文件的 名字|位置 规定规范,但是开发通常将配置文件放到/resource/applicationContsext.xml中。

77c54cdd137732925bd4135c84088273.png

2.4 测试

public class App { public static void main(String[] args) { //1.创建spring容器 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContsext.xml"); //2.从spring容器中获得user对象 User user = (User) ac.getBean("user"); System.out.println(user); } }

2.5 Spring简单原理

spring读取xml配置文件,读取配置文件中的诸多对象信息(完整类名);

根据完整类名,获得Class字节码文件(Class.forName(类名));

通过反射技术,创建出对象(newInstance);

创建出的对象会放入到一个Map结构中,其中name属性值作为键,对象作为值;

我们从spring容器中获得对象时,就可以根据键去取出值(对象)。

3. Spring进阶介绍

3.1 BeanFactory&ApplicationContext(概念)

6033a15f37a2f1cec472f9e104f8f38e.png

上图是BeanFactory的继承关系图

126422b9cd23bca9ebdb8bb4d02d0aa9.png

上图是ApplicationContext的继承关系图

ApplicationContext是更加常用的容器类型;

BeanFactory是spring框架刚刚出现时,诞生的原始的容器类型;

ApplicationContext是spring框架后续随着发展诞生的拥有更多功能的容器类型;

ApplicationContext接口是BeanFactory接口的子类,ApplicationContext拥有BeanFactory的全部功能;

BeanFactory是只具备容器的基本功能;

ApplicationContext对容器功能进行了极大的丰满:

默认初始化所有的Singleton,也可以通过配置取消预初始化。

继承MessageSource,因此支持国际化;

资源访问,比如访问URL和文件;

事件机制;

同时加载多个配置文件;

以声明式方式启动并创建Spring容器。

3.2 IOC与DI

3.2.1 IOC

IOC:inverse of control 反转控制。

理解:开发人员以前创建对象时,都是需要用到什么对象就去手动创建什么对象,如果对象中有依赖关系存在,就需要手动去维护依赖关系,例如:我们需要A对象,但A对象依赖于B对象,我们就需要先手动创建B对象,然后手动创建A对象,再把B对象注入到A对象中,总结说,就是整个对象的生命周期都是由开发人员手动维护的。

上面这段话可以理解为传统的控制方式,或者说正向的控制对象方式。

什么是反转控制呢?

将对象的创建以及依赖关系的注入全部交给程序帮我们完成,而不再是由我们自己去控制你程序完成,那么就可以称之为反转控制,反转的是对象的创建方式。

3.2.2 DI

DI:Dependency Injection 依赖注入

理解: 将依赖的属性注入到对象的过程,即为依赖注入。

例如:Servlet依赖于Service,Service依赖于Dao等,我们将Service注入到Servlet的过程就是依赖注入,依赖注入的方   式有两种,一种是set方法注入,还用一种是构造方法注入,这两种方式,Spring都支持。

3.2.3 IOC与DI之间的关系

我们要实现IOC设计必须要有DI技术的支持。

4.Spring配置详解

4.1 Spring创建对象方式

4.1.1 由Spring调用构造方法创建(使用最多)

4.1.2 使用静态工厂方法创建对象

工厂方法:

public class UserFactory { //创建User对象并返回 public static User getUser1(){ User u = new User(); u.setName("jerry"); u.setId(2); return u; } }

配置文件:

测试:

public class App { public static void main(String[] args) { //1.创建spring容器 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContsext.xml"); //2.从spring容器中获得user对象 User user = (User) ac.getBean("user2"); System.out.println(user); } }

4.1.3 使用动态工厂方法创建对象

工厂方法:

//创建User对象并返回 -> 动态工厂方法 public User getUser2(){ User u = new User(); u.setName("jack"); u.setId(3); return u; }

xml配置:

测试:

public class App { public static void main(String[] args) { //1.创建spring容器 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContsext.xml"); //2.从spring容器中获得user对象 User user = (User) ac.getBean("user3"); System.out.println(user); } }

4.2 对象的作用域&生命周期

配置:

测试:

@Test public void fun1() { //1.创建spring容器 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContsext.xml"); //2.从spring容器中获得user对象 //同一个User4只存在一个实例 User user1 = (User) ac.getBean("user4"); User user2 = (User) ac.getBean("user4"); //true => 只有一个User4实例(singleton) //false => 每次从容器中获取的都是不同的对象(prototype) System.out.println(user1 == user2); }

@Test public void fun2() { //1.创建spring容器 -> 创建所有singleton对象 ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContsext.xml"); //2.关闭spring容器 -> 销毁所有singleton对象 ac.close(); }

本文地址:https://blog.csdn.net/weixin_45245455/article/details/108033210

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值