SpringIOC个人心得笔记

        本篇博客是在学习Spring时所写博客,仅供参考(加自己心得想法)

目录

学习流程 

1.Spring的基本概述

1.1spring是一个开源框架 轻量级  2003年兴起的  俗称一站式轻量级开源框架

1.2spring的好处:

1.3Spring的版本

1.4Spring的IOC入门

1.5官网:http://spring.io/   没有JAR的可以去官网下载  

1.6解压Spring的开发包

1.7三种jar简单介绍

1.8我们来创建一个WEB项目  

1.9代码模板

1.10 SpringIOC底层实现详解!!! 例如之前使用MYSQL 换其他数据库 可能需要改源码 现在Spring就是在帮助我们 以后无需改源码 改配置文件即可  

2.0 DI和IOC的区别

2.1 Spring的工厂类

2.2ApplicationContext和BeanFactory区别

2.3XML的自动提升 配置在celipse中wendow 查找到XML 去配置 前提你是有约束的 

2.4Bean的相关的配置

2.5Bean的生命周期的配置(了解)

2.6Bean的作用范围的配置(重点)

2.7Spring的Bean的实例化方式(了解)

无参构造方法的方式(默认)

静态工厂实例化的方式

实例工厂实例化的方式

Spring的属性注入

Set方法的方式的属性注入

P名称空间的属性注入(Spring2.5以后)

SpEL的属性注入(Spring3.0以后)

集合类型属性注入(了解)

Spring的IOC的注解开发


   本人使用的是4.2版本 

学习流程 

  1. Spring第一天:Spring的概述、SpringIOC入门(XML)、Spring的Bean管理、Spring属性注入
  2. Spring第二天:Spring的IOC的注解方式、Spring的AOP开发(XML)
  3. Spring第三天:Spring的AOP的注解开发、Spring的声明式事务、JdbcTemplate。

1.Spring的基本概述

1.1spring是一个开源框架 轻量级  2003年兴起的  俗称一站式轻量级开源框架

1.2spring的好处:

1.3Spring的版本

Spring3.x和Spring4.x  Spring5.x (已经出来了)

1.4Spring的IOC入门

IOC俗称"控制反转" 

控制反转:将对象的创建权反转给(交给)Spring。意思把对象交给Srping容器来创建 底层会使用Spring的工厂类通过xml配置文件+反射来实现 具体后面详细介绍  不需要NEW 来创建对象了  工厂模块不清楚的可以去看看23种设计模式 PS:有的也说24种

我学spring 用了 两种模式 一个maven  一个是普通自己导入jar 出现一大堆问题(已解决PS不会的去CSDN看看大佬博客立马get到错误的点了) 主要还是JAR包问居多  建议用maven还是不错的 前提有网络 不然缺少jar 无法去中央仓库去下载

1.5官网:http://spring.io/   没有JAR的可以去官网下载  

1.6解压Spring的开发包

  1. docs            :Spring的开发规范和API
  2. libs              :Spring的开发的jar和源码
  3. schema      :Spring的配置文件的约束

由于网络限制上不了QQ 无法截图  具体详细 我博客写完会把我的SpringDemo上传到CSDN 感兴趣的可以下载学习

1.7三种jar简单介绍

.jar 就是我们需要使用的Spring的jar包 

javadoc.jar  是JAR包的官方文档 可以打开看看

sources.jar 是源码 感兴趣的可以把这个导入到项目中查看源码 

1.8我们来创建一个WEB项目  

下面是体系结构 

引入包的话 目前我们首先引入上面红框框的四块jar  最基础的jar  后面使用其他的 再导入

 

0. 是apache提供的日志接口 --定义的都是接口规范

1.Spring的日志文件

2. 四个基本jar(最主要的!!)

1.9代码模板

创建一个接口及接口实现类

/**
 * 用户管理DAO层接口
 * @author jt
 *
 */
public interface UserDAO {
	public void save();
}
/**
 * 用户管理DAO层实现类
 * @author jt
 *
 */
public class UserDAOImpl implements UserDAO {
	private String name;

	public void setName(String name) {
		this.name = name;
	}

	public void save() {
		System.out.println("UserDAOImpl执行了..."+name);
	}

}

创建一个测试类

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
 * Spring的入门
 * @author jt
 *
 */
public class SpringDemo1 {

	@Test
	/**
	 * 传统方式的调用
	 */
	public void demo1(){
		UserDAOImpl userDAO = new UserDAOImpl();
		userDAO.setName("王东");
		userDAO.save();
	}
	
	@Test
	/**
	 * Spring的方式的调用
	 */
	public void demo2(){
		// 创建Spring的工厂
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDAO userDAO = (UserDAO) applicationContext.getBean("userDAO");
		userDAO.save();
	}
	
	@Test
	/**
	 * 加载磁盘上的配置文件
	 */
	public void demo3(){
		ApplicationContext applicationContext = new FileSystemXmlApplicationContext("C:\\applicationContext.xml");
		UserDAO userDAO = (UserDAO) applicationContext.getBean("userDAO");
		userDAO.save();
	}
}

思考 这是传统方式 有什么不好的?

如果底层的实现切换了,需要修改源代码,能不能不修改程序源代码对程序进行扩展?

那么就引入了Spring的IOC底层实现  

以前想创建对象 用传统方式 需要实现类 或者接口方式 

问题2  面向接口编程的优缺点?(想深入研究去看大佬博客)

多态  方便程序的扩展   缺点 有耦合  联系过紧  需要改底层源代码

OCP原则认为:一个软件应该对扩展开放,对修改关闭。设计模式原则 这个很重要 我现在也是了解个皮毛

好的程序设计 应该满足OCP(设计模式)  尽量不修改底层源码的情况下对程序做扩展

1.10 SpringIOC底层实现详解!!! 例如之前使用MYSQL 换其他数据库 可能需要改源码 现在Spring就是在帮助我们 以后无需改源码 改配置文件即可  

工厂模式------>

applicationContext.xml的配置(默认名字)  上面是Bean的约束 可以去Spring查找的复制过来

上面是如何写Bean的约束 不清楚的可以百度 

2.0 DI和IOC的区别

IOC:控制反转,将对象的创建权反转给了Spring。

DI:依赖注入(DI的前提是IOC的环境 才可以使用DI )前提必须有IOC的环境,

Spring管理这个类的时候将类的依赖的属性注入(设置)进来

2.1依赖   B中有A

Class A{}

Class B{

 public void xxx(A a){}}

继承:is a    父子

Class A{}

Class B extends A{}

聚合:has a  包含

2.1 Spring的工厂类

Spring工厂类的结构图

ApplicationContext继承BeanFactory。

2.2ApplicationContext和BeanFactory区别

  • BeanFactory:调用getBean的时候,才会生成类的实例。
  • ApplicationContext  :新版本的工厂类 子类比父类的功能更多 目前子类使用居多
  1. ApplicationContext:加载配置文件的时候,就会将Spring管理的类都实例化。(单例 默认是单例)
  2. ApplicationContext有两个实现类
    1. ClassPathXmlApplicationContext  :加载类路径下的配置文件(通常比较常用)
    2. FileSystemXmlApplicationContext   :加载文件系统下的配置文件

个人理解 第一个 可以认为 是相对路径 默认查找Src路径下的配置文件   第二个是绝对路径 包含本地磁盘的路径

2.3XML的自动提升 配置在celipse中wendow 查找到XML 去配置 前提你是有约束的 

 

2.4Bean的相关的配置

  • id                 :使用了约束中的唯一约束。里面不能出现特殊字符的。
  • name         :没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的)。里面可以出现特殊字符。

2.5Bean的生命周期的配置(了解)

  • init-method                 :Bean被初始化的时候执行的方法
  • destroy-method         :Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭
<!-- Spring的sBean的生命周期的配置=========== -->
<!-- 	<bean id="customerDAO" class="com.itheima.spring.demo2.CustomerDAOImpl" scope="prototype" init-method="setup" destroy-method="destroy"/> -->

PS: 个人认为

  • 在默认单例模式情况下 关闭工厂就会销毁而且每创建产生的地址都相同
  • 多例的情况下 不会销毁  而且每创建产生的地址都不相同

2.6Bean的作用范围的配置(重点)

  • scope :Bean的作用范围
    • singleton          :默认的,Spring会采用单例模式创建这个对象。
    • prototype        :多例模式。(Struts2Spring整合一定会用到)
    • request              :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
    • session               :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。
    • globalsession    :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。

2.7Spring的Bean的实例化方式(了解)

Bean已经都交给Spring管理,Spring创建这些类的时候,有几种方式:

无参构造方法的方式(默认)

静态工厂实例化的方式

实例工厂实例化的方式

Spring的属性注入

Set方法的方式的属性注入

P名称空间的属性注入(Spring2.5以后)

  • 写法:
    • 对象属性         p:属性名-ref=”值”
    • 普通属性         p:属性名=”值”

SpEL的属性注入(Spring3.0以后)

  • SpEL:Spring Expression Language,Spring的表达式语言。
    • 语法:
      • #{SpEL}

集合类型属性注入(了解)

 

<!-- Spring的集合属性的注入============================ -->
	<!-- 注入数组类型 -->
	<bean id="collectionBean" class="com.itheima.spring.demo5.CollectionBean">
		<!-- 数组类型 -->
		<property name="arrs">
			<list>
				<value>王东</value>
				<value>赵洪</value>
				<value>李冠希</value>
			</list>
		</property>
		
		<!-- 注入list集合 -->
		<property name="list">
			<list>
				<value>李兵</value>
				<value>赵如何</value>
				<value>邓凤</value>
			</list>
		</property>
		
		<!-- 注入set集合 -->
		<property name="set">
			<set>
				<value>aaa</value>
				<value>bbb</value>
				<value>ccc</value>
			</set>
		</property>
		
		<!-- 注入Map集合 -->
		<property name="map">
			<map>
				<entry key="aaa" value="111"/>
				<entry key="bbb" value="222"/>
				<entry key="ccc" value="333"/>
			</map>
		</property>

 

Spring的IOC的注解开发

  • 注解的入门
    • 引入aop的包
    • 引入context约束
      • <context:component-scan />
    • 使用注解开发
      • @Component           :定义Bean
        • @Controller    WEB
        • @Service          Service
        • @Repository  DAO
      • 属性注入:
        • 普通属性        @Value
        • 对象属性        @Resource
          • @Autowired   :按类型注入属性,按名称@Qulifier
  • XML方式和注解方式比较
    • XML方式        :适用性更广,结构更加清晰。
    • 注解方式        :适用类是自己定义,开发更方便。
  • XML和注解的整合开发
    • XML定义类
    • 注解属性注入
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值