前言:网上的框架学习教程千千万,所以我通过查看别人理解的,以及一些教程总结了我所掌握的spring的知识点,总的来说就是三个知识点,IOC、DI和AOP的使用,所以并没有那么复杂的理论知识点,如果有错的地方接受大佬们指点!
首先:简单了解一下Spring是个什么东西!
Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,主要是为了解决企业应用开发的复杂性而诞生的。
现在我们来简单实现一下通过Spring输出HelloWorld:
1、新建一个项目,导入Spring的核心依赖包
传送门:ssm的jar包

2、创建HelloWorld.java文件

package com.java.bean;
public class HelloWorld {public void hellowrld(){System.out.println("HelloWorld!");}}

3、创建Spring的配置文件,程序就是通过配置文件作为耦合合 bean 的耦合类,这是一个xml文件,取名为spring.xml

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置service
<bean> 配置需要创建的对象
id :用于之后从spring容器获得实例时使用的
class :需要创建实例的全限定类名-->
<bean id="hello" class="com.java.bean.HelloWorld"></bean>
</beans>

3、创建测试类

package com.java.test;
public class TestHelloWorld {public static void main(String[] args) {//加载spring配置文件ApplicationContext con = new ClassPathXmlApplicationContext("spring.xml");//通过bean的id获取需要创建的对象HelloWorld test= (HelloWorld)con.getBean("hello");test.hellowrld();}
}

一个简单的spring实例就这样完成了,但是这样还没能完全体现出来他的优点,所以我们接下来需要做的就是Spring的第一个概念,ICO容器。

IOC:控制反转,把对象的创建以及各个对象间的关系还有对象的销毁交给Spring容器去管理,在实际代码中无需去手动new 对象,只要从spring容器中拿对象来使用。
我们就先肤浅的理解为不用去new一个对象。

Spring 提供了以下两种不同类型的容器:
Spring BeanFactory 容器:它是最简单的容器,给 DI 提供了基本的支持
Spring ApplicationContext 容器:该容器添加了更多的企业特定的功能,当然我一般都是用这个。

IOC的实例,其实就是刚刚HelloWorld的实例,IOC就是通过配置文件,把我要需要创建的对象,也就是new的对象放到IOC容器里面,至于怎么放,就是我们在配置文件里面写的

<bean id="hello" class="com.java.bean.HelloWorld"></bean>

然后怎么从这个容器里面拿出来,就是通过ApplicationContext 的getBean通过bean的id获取到这个对象。

当然Spring实例化bean一共有三种方式:
第一种就是上面写的通过class实例化,也就是使用类构造器实例化(默认无参数)。
第二种就是使用静态工厂方法实例化(简单工厂模式)。

//factory-method指的是方法名
<bean id="hello" class="com.java.bean.HelloWorld" factory-method="hellowrld">

第三种就是使用实例工厂方法实例化(工厂方法模式)。
这种方式需要结合第一种,写两个bean,并且多添加一个工厂类,在工厂类中返回对象(HelloWorld)的实例

package com.java.bean;
public class HelloWorldFactory {public HelloWorld getHello() {return new HelloWorld ();}
}

第一个bean指向工厂类,获取工厂类的实例,第二个bean则根据第一个bean的工厂类实例,指向factory-method的方法名

<bean class="com.java.HelloWorldFactory " id="HelloWorldFactory "/>
<bean id="helloworld" factory-bean="HelloWorldFactory " factory-method="getHello">

DI:依赖注入,引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。简单来讲就是在Spring的配置文件编写bean的时候添加 property把属性注入
我们将第一个例子的对象修改一下:

public class HelloWorld {private String message;public void setMessage(String message){this.message  = message;}public void hellowrld(){System.out.println("HelloWorld!"+message);}

在配置文件bean中间添加property属性

 <property name="message" value="你好,世界!"/>

这是通过属性的set方法注入,相应的还有按照类型和索引注入,大家了解一下就行。
类型注入

<constructor-arg type="int" value=""></constructor-arg>
<constructor-arg type="String" value=""></constructor-arg>

索引注入

<constructor-arg index="0" value=""></constructor-arg>
<constructor-arg index="1" value=""></constructor-arg>

接下来就是AOP:面向切片编程,面向切面编程的目标就是分离关注点,什么意思呢,就是我们执行一个程序,做一件事,这件事作为一个切点,这件事的前后就是切面,也就是服务,用来服务这个切点事件的服务。例如:开车出门这件事,就是一个切点,而我们要执行这件事需要的条件就是开车前车库的门(我们指自动门)开启,开车出去后车库门关闭,车库门的开启和关闭服务了我们开车出门这件事。
1、定义切点

public class Aop01 {public void car() {System.out.println("开车");}
}

2、定义切面

public class Aop02 {public void befor() {System.out.println("车库开门----这是切点前,调用切点时自动在切点前执行服务");}public void after() {System.out.println("车库关门----这是切点后,调用切点时自动在切点后执行服务");}
}

3、配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"><!-- 目标对象 (切点)--><bean id="aop01" class="com.spring.aop.Aop01"/><!-- 切面bean(服务) --><bean id="aop02" class="com.spring.aop.Aop02"/><!-- 面向切面编程 --><aop:config><aop:aspect ref="aop02"><!-- 定义切点 --><aop:pointcut expression="execution(* *.cat(..))" id="embark"/><!-- 声明前置通知 (在切点方法被执行前调用)--><aop:before method="befor" pointcut-ref="embark"/><!-- 声明后置通知 (在切点方法被执行后调用)--><aop:after method="after" pointcut-ref="embark"/></aop:aspect></aop:config>
</beans>

4、测试

public class TestAop {public static void main(String[] args) {ApplicationContext con = new ClassPathXmlApplicationContext("spring.xml");Aop01 aop = (Aop01)con.getBean("aop01");aop.cat();}
}

以上就是Spring入门的一些基础知识,至于源码那些什么的都不是咱现在这个级别接触的,先掌握使用,然后知道为什么,再去考虑源码实现原理这些。

Spring入门(通俗易懂)相关推荐

  1. Spring入门示例及相关概念介绍

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Spri ...

  2. IDEA下——Spring入门程序

    创建一个Maven的项目,我的项目结构如下: 在pom文件里写下需要导入的依赖: <?xml version="1.0" encoding="UTF-8" ...

  3. spring入门详细教程(五)

    前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...

  4. Spring入门详细教程(四)

    前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...

  5. Spring入门详细教程(三)

    前言 本篇紧接着spring入门详细教程(二),建议阅读本篇前,先阅读第一篇和第二篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/101 ...

  6. Spring入门详细教程(二)

    前言 本篇紧接着spring入门详细教程(一),建议阅读本篇前,先阅读第一篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/1016553 ...

  7. Spring入门介绍:

    Spring入门介绍 Spring诞生: 创建Spring的目的就是用来替代更加重量级的的企业级Java技术 简化Java的开发 基于POJO轻量级和最小侵入式开发 通过依赖注入和面向接口实现松耦合 ...

  8. Spring入门5.事务管理机制

    Spring入门5.事务管理机制 20131126 代码下载 : 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 回顾之前的知识,Spring 最为核心的两个部分 ...

  9. “Spring入门”教程系列

    大家好, 我很高兴向您介绍"Spring入门"教程系列! 这是一系列文章,最初由我们的JCG合作伙伴 Michal Vrtiak在vrtoonjava博客上撰写 . 本系列中将逐步 ...

最新文章

  1. 腾讯联合国家天文台启动探星计划,优图AI可提升120倍数据处理效率
  2. no qualifying bean of type_就是要让你彻底学会 @Bean 注解
  3. 三百年前的AI骗局:骗过美国总统和普鲁士大帝的国际象棋AI
  4. java栈的实现_栈的实现(Java)
  5. 论文浅尝 | 基于局内去噪和迁移学习的关系抽取
  6. EMCA创建em资料库时报错
  7. [转载] python3基础:异常处理及python常见异常类型总结
  8. yolov3前向传播(一)-- darknet53网络解析与实现
  9. 面试过程中,竟然遇到PUA,我不得不服这种“潜规则”~
  10. 最后1天!阿里云双11拼团入官方热荐团直享最低折扣!还有机会瓜分百万现金!...
  11. linux pam 解锁_Linux多次登录失败用户被锁定使用Pam_Tally2解锁
  12. OpenCV绘制朱利亚(Julia)集合图形
  13. python求斜边上的高_直角三角形斜边上的高如何求?
  14. java 微信多公众号管理_微信公众号开发:支持对多个公众号的管理
  15. 第三章 Unity基础之API
  16. PHP:firebase/php-jwt生成jwt和验证
  17. Day 20 IOl流
  18. JavaScript-节点操作
  19. WEB请求处理二:Nginx请求反向代理
  20. win mac 双系统 opencore 硬盘引导_一分钟组装Win+Mac通用移动固态硬盘,千万别忽略这个细节...

热门文章

  1. c# webform ajax操作,C# WebForm开发 前台请求后台数据的方法总结
  2. 【金三银四】多线程面试题(2021最新版)
  3. 商标的有效期限是多久?到期后如何进行续展?
  4. 池化(Pooling)
  5. JavaScript事件 鼠标事件
  6. java xmx设置_JVM内存设置多大合适?Xmx和Xmn如何设置?
  7. android 异步加载图片总结
  8. 全新ThihkPHP开发聚合支付系统源码兼容所有易支付程序免费下载
  9. 程序员最值得关注的10个C开源项目
  10. 服务器出现 HTTP 400、404、500、502 错误原因以及解决办法