1.1浅谈Spring(一个叫春的框架)
如今各种Spring框架甚嚣尘上,但是终归还是属于spring的东西。所以在这里,个人谈一谈对spring的认识,笔者觉得掌握spring原理以及spring所涉及到的设计模式对我们具有极大的帮助。我们基于what ,why ,how来研究Spring。
Spring是什么?
Spring为什么?
如何使用Spring?
关于这三个问题可以先自行百度!!!针对这个3个问题提出以下几点。
Spring有三大地方值得注意:
1.IOC容器
2.IOC控制反转和DI依赖注入
3.AOP面向切面编程
首先谈一下这个IOC容器:
提到容器,我们最先就能想到的就是WEB容器,那么WEB容器是干什么的?WEB容器就是用来对servlet管理,创建,销毁等一些操作的东西。通俗的讲,servlet“住”在WEB容器,它的一切都与这个容器有关。所以IOC容器也有这么一个概念,但是他是用来管理Bean的,Bean之于Spring就相当于对象之于java。java是面对对象编程,而spring是面向Bean编程的。Spring IoC容器如何知道哪些是它管理的对象呢?这就需要配置文件,Spring IOC容器通过读取配置文件中的配置元数据,通过元数据对应用中的各个对象进行实例化及装配。一般使用基于xml配置文件进行配置元数据,而且Spring与配置文件完全解耦的,可以使用其他任何可能的方式进行配置元数据,比如注解、基于java文件的、基于属性文件的配置都可以。这就需要提出第二个概念IOC和DI了。
DI依赖注入:这里首先声明一点:IOC容器是一个容器,而IOC就是一个概念性的东西。这就好比,我是TOM,而TOMCAT就是TOM的猫而跟TOM这个人不是一个物种。
IOC是“Inversion of Control“的缩写,翻译过来就是控制反转。为什么说它是控制反转呢?我们可以用程序来描述一下:
public class WQ {int x; }
这里有一个类WQ
平常我们要使用的话一般都是自己去创建一个
public static void main(String[] args) {WQ wq = new WQ();}
但是如果用Spring呢?
@Autowired
private WQ wq;
这里是基于注解的注入方式。加上这个注解IOC容器就会在Spring的配置文件中自行查找。这就相当于本来我们是全权来控制这个对象的,而在我们队这个对象添加了@Autowired之后,IOC容器就会自动去创建,这就相当于我们把控制权交给了IOC容器。所以就叫控制反转。可能有人会问为什么private属性的对象也可以呢?不好意思,Spring就是可以为所欲为。
但是,Spring并不是只有注解这一种方式,只是注解开发的效率高,所以基本都用注解开发了。DI依赖注入有4种方式:
①通过接口注入
这里的接口注入又分为两种模式:1.静态工厂模式 2.非静态工厂模式
创建需要实例化的类
类中必须带有无参构造器,因为IOC容器是通过反射的方式来创建对象的。
public class Car {public Car() {}private String brand;private double price;public Car(String brand, double price) {super();this.brand = brand;this.price = price;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}
}
静态工厂模式:这种工厂模式必须先创建工厂类
public class StaticCarFactoty {private static Map<String , Car > cars = new HashMap<String ,Car>();static {cars.put("Audi", new Car("Audi",300000));cars.put("Ford", new Car("Ford",200000));}public static Car getCar(String name) {return cars.get(name);}
}
XML的配置
<!--class要写工厂的类;factory-method要写工厂类中用于创建bean的方法-->
<bean id="car1" class="com.wq.factory.StaticCarFactoty"factory-method="getCar">
<constructor-arg value="Audi"></constructor-arg>
</bean>
非静态模式:这要创建工厂类,并在XML中实例化工厂
public class InstanceCarFactory {private Map<String,Car> cars =null;public InstanceCarFactory() {// TODO Auto-generated constructor stubcars = new HashMap<String,Car>();cars.put("Audi", new Car("Audi",300000));cars.put("Ford", new Car("Ford",200000));}public Car getCar(String brand) {return cars.get(brand);}
}
XML配置
<!-- 通过实例工厂方法,需先实例工厂 -->
<bean id="Carfactory" class="com.wq.factory.InstanceCarFactory"></bean>
<!-- 配置bean -->
<bean id="car2" factory-bean="Carfactory" factory-method="getCar"><constructor-arg value="Ford"></constructor-arg>
</bean>
②通过Setter方法注入
XML配置
<bean id="car3" class="com.wq.enties.Car"><property name="brand" value="BMW"></property><property name="price" value="400000"></property>
</bean>
③通过构造器注入
XML配置
<bean id="car4" class="com.wq.enties.Car"><constructor-arg value="Benz" index="0"></constructor-arg><constructor-arg value="800000" index="1"></constructor-arg>
</bean>
这里构造器注入必须使在这个类中存在这个构造器,index表示该参数在构造器中是第几个。
也可以使用通过类型指定
<bean id="car4" class="com.wq.enties.Car"><constructor-arg value="800000" type="java.lang.Double"></constructor-arg><constructor-arg value="Benz" type="java.lang.String"></constructor-arg>
</bean>
④通过注解方式注入
就如同之前说的在需要实例化的类上添加@Autowired
最后就来讲一下AOP了
AOP是叫面向切面编程,主要是找到横切关注点。这段话说起来很绕口,实际上我们可以认为它是在找规律,或者直接说是找到一个合适的规则。AOP的核心思想就是独立开发,一起运行。用两个字来形容的话就是:解耦。
AOP就是从多个业务中找到相同的部分并他们模块化,并在需要使用到这些相同的模块的时候用注解的形式来添加,体现了可重用性。如日志的输出,事务的开启关闭等。
以上,就是个人对spring特点的浅谈,后续会增加从源码的角度来分析。
希望各路豪杰不宁赐教,有不同理解的可在下方评论区讨论。
转载于:https://www.cnblogs.com/Qiansion/p/9780658.html
1.1浅谈Spring(一个叫春的框架)相关推荐
- 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包
浅谈:Spring Boot原理分析(更多细节解释在代码注释中) 通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.f ...
- 由openSession、getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持
由openSession.getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持 Spring和Hibernate的集成的一个要点就是对事务的支持,op ...
- 浅谈 Spring IOC
浅谈 Spring IOC 什么是IOC 理解 IOC 和 DI Spring IOC 相关操作个人总结 什么是IOC Ioc-Inversion of Control,即"控制反转&quo ...
- 编程浅谈-以一个初出茅庐的Java程序员视角
编者是一个从事Java开发的普通软件攻城狮,迄今为止,粗粗算来不过刚刚进入编程的世界不过两年,但在这两年的光阴里,每当我抬头仰望星空(苦命加班)时脑海里总有这样一个疑问--"什么是编程&qu ...
- 浅谈Spring定时任务
浅谈Spring定时任务 三种定时任务基于原理 多定时任务并发配置 动态定时任务 定时任务Demo 三种定时任务基于原理 SpringBoot配置定时任务主要有Spring Schedule.JDK自 ...
- 浅谈Spring IOC的理解
浅谈Spring IOC的理解 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊 ...
- 浅谈 Spring IOC和AOP
浅谈 Spring IOC和AOP IOC 控制反转 以前创建对象的主动权和时机是由于自己把握的,现在将这种权利转移到Spring容器中,并且根据配置文件去创建对象管理对象 ioc的注入方式有三种:构 ...
- 浅谈Spring IOC和DI及Spring工厂类
浅谈Spring IOC和DI及Spring的工厂类 文章目录 浅谈Spring IOC和DI及Spring的工厂类 一. IOC 1.什么是IOC 2.为什么使用IOC 传统开发模式的弊端 3. 使 ...
- 浅谈Spring MVC知识
关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:"MVC框架是什么?你说一说."其实我们都知道这个问题还需要问的, ...
- 浅谈Spring的Bean生命周期和作用域
学习spring有一段时间了.有的人说Spring的发展就是Java的发展,Spring就是Java的半壁江山,而且AOP思想更是OOP思想的一种扩展和延申.所以今天来浅谈一下spring的生命周期和 ...
最新文章
- hbase shell 查看列名_Hbase的简单命令使用
- [原创]存储过程里面的递归
- BZOJ1001 狼抓兔子
- 还在用Matplotlib? 又一可视化神器pyecharts登场
- 《构建之法》阅读第四章、第十七章收获
- 静态和动态web的区别与联系
- was css,Sass无效的CSS…:期望的表达式(例如,1px,粗体),是“{”
- Gym 101915J(并查集)
- 大数据_MapperReduce_Hbase配置参数说明_以及部分源码说明---Hbase工作笔记0031
- 最新的CocoaPods的使用教程(一)
- Python redis 批量模糊删除keys
- 解决新电脑的系统安装问题:针对BIOS的UEFI模式
- PHP发微信消息必须开网吗,关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题...
- cudnn下载与安装
- 基于单片机的公交车系统
- Java完成excel表格导出
- 嵌入式 linux 之 Lzma 移植
- 笔记本UIOP几个键总是输入数字的问题
- SAP中文档管理用户需求与简要分析笔记
- 手机信号排行榜出炉!教你一招查看、提升手机信号