Spring

1.Spring是 开源 的 轻量级 框架

2.一站式框架,内部支持对多种优秀开源框架的集成。

3.Spring 核心 主要有两部分:

(1)AOP:面向切面编程,扩展功能不是修改源代码实现。

(2)IOC:控制反转。创建对象不是通过new方式来实现,而是交给Spring配置来创建对象。

spring框架什么时候被加载?
ClassPathXmlApplicationContext(“applicationContext.xml”)执行后
bean中就会被创建到内存中(通过Java反射机制)
需要使用bean的时候,getBean(id)

怎么把ApplicationContext做成单态(唯一性)

import spring;
final public class ApplicationContextUtil{
	private static ApplicationContext ac = null; 
	private ApplicationContextUtil(){};//构造函数私有
	static{
		ac = new ClassPathXmlApplicationContext("applicationContext.xml");
	}
	public static ApplicationContext getApplicationContext (){
	return ac;
	}
}

???理解依赖注入
作者:anderson93
链接:https://www.zhihu.com/question/32108444/answer/121881566
来源:知乎

如何用最简单的方式解释:____________________________________________________________
还是一步一步解释最为简单,好比搬用数学公式,不理解还是不懂。____________________________________________________________
假如有一个 船©类 ,一个 桨(J) 类,

   class C{
      J j = new J() ;
    }

如果船要干什么事,肯定需要桨的参与。所以是十分 “依赖”桨;出了需求需要重构:这时候我们需要控制桨的长度为10在构造方法中。我们需要这么写;

class C{
J j = new J(10) ;
}

如果有一个改动同时需要修改桨构造方法,又需要修改船其中的new J()方法(修改两处)。这时候就设计者就思考,为什么我们加入一个特性需要更改两个类中代码(这也就是耦合度高)!所以我们要解耦要依赖注入;常用解耦方式:构造方法注入如下:我重构代码的时候再也不用看依赖的桨长还是短的了!因为船构造方法依赖了桨。任你桨怎么设计,我用的时候传一个桨进来即可。(下层依赖上层,用的时候传入,而不是针对下层去修改)

class C{
  J j 
  public c(J j){
 this.j = j;
};
}

工厂模式注入工厂模式 Human 人 去注入; 工厂类如下

Class Human {
     J j =new J();
   J getJ(){
      return j ;
}
}

此时如下:不管你怎么改桨,改成100米与船都无关,他只要依赖Human,来了个需求一千个船修改桨需求,我只修改Human类中方法便可。(核心业务逻辑需要依赖的类,该类实例化交给第三方类来实现注入。)

Class C {
  J j ;
Human h = new Human;
    j=Human.getJ();
}

框架注入(本质还是工厂设计模式的具体实现)本质也是第三方依赖注入,但是这个第三方可以脱离类。将对象依赖映射信息存储在容器一般为.xml 或者特定的对象中,并实现动态的注入。实现如果你需要我就给你哦。
最后本人个人理解:为什么要有依赖注入(一种设计代码模式),因为我们要控制反转(设计代码的思路)。为什么控制反转。因为我们软件设计需要符合软件设计原则依赖倒置(设计代码原则),单一职责原则。说通俗点,咱们要解耦啊。
MVP模式就是解耦比较全面的设计模式模型,

将实体类交给Spring管理,既实现了IOC
把类的属性值设置到对象里实现DI,
DI实现的三种方式:
1、构造函数注入
2 、set方法注入
3、P名称空间注入(要先引入,SpEL V3.0+)
SpEL的注入方式:普通属性、对象、复杂属性
Spring的分模块开发:
1、加载配置时加载多个配置文件
2、在一个配置文件中引入多个配置文件

AOP
底层原理:动态代理 JDK、Cglib(第三方代码生成类库)
可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术
横向抽取机制代替传统纵向继承
横向抽取:代理机制
Cglib使用继承的方式产生代理对象
AspectJ:面向切面框架
术语:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值