Spring基础学习笔记(一)

Spring

文章目录

1、Spring框架宗旨:

1.1不重新发明技术,让原有的技术使用起来更加方便

2、spring几大核心功能:

2.1、IOC/DI(控制反转/依赖注入)
2.2、AOP(面向切面编程)
2.3、声明式事务

3、Spring runtime(各模块):

在这里插入图片描述

3.1、test:Spring提供测试功能。

3.2、Core Container:核心容器,Spring启动最基本条件

3.2.1、Beans:Spring负责创建类的对象并管理对象
3.2.2、Core:核心类
3.2.3、Context:上下文参数,用来获取外部资源或管理注解等
3.2.4、SpEL:expression.jar

3.3、AOP:实现aop功能需要的依赖

3.4、Aspects:切面AOP所依赖的包

3.5、Data Access/Integration:Spring封装数据访问层的相关内容

3.5.1、JDBC:Spring对JDBC的封装
3.5.2、ORM:封装了持久层框架的代码,比如Hibernate
3.5.3、transactions:对应Spring-tx.jar,用于声明式事务的使用

3.6、WEB:Spring完成web相关功能时需要

3.6.1、tomcat加载Spring配置文件时需要有spring-web包

4、IOC

4.1、中文名称:控制反转 英文名称:(Inversion of Control)
4.2、IOC是什么?

IOC主要完成的就是原来程序员通过new来实例化对象的事情,把new对象的事情交给Spring负责

4.3、控制反转中控制指的是:控制类的对象
4.4、控制反转中反转指的是:给Spring负责实例化对象
4.5、IOC最大的作用:解耦(解的是对象管理和程序员之间的耦)

5、搭建一个最简单的Spring框架

5.1、导入jar包

导入四个核心包和一个日志包(commons-logging)
在这里插入图片描述

5.2、创建一个Spring的配置文件(applicationContext.xml)

5.2.1、 文件名称和路径自定义.
5.2.2、 记住Spring 容器ApplicationContext,applicationContext.xml 配
置的信息最终是存储到了AppliationContext 容器中
5.2.3、spring 配置文件是基于schema的
5.2.4、配置文件中只需要引入基本schema(然后通过来创建对象)
默认配置文件被加载时穿件对象的

<?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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- id 表示获取到对象标识
class 创建哪个类的对象
-->
<bean id="peo" class="com.myhexin.pojo.People"/>
</beans>
5.3、编写测试方法

5.3.1、使用getBean(“标签id 值”,返回值类型);如果没有第二个参数,
则默认是Object的
5.3.2、使用getBeanDefinitionNames(),能得到Spring 容器中目前所有管理的所有
对象.

ApplicationContext ac = new  ClassPathXmlApplicationContext("applicationContext.xml");
People people = ac.getBean("peo",People.class);
System.out.println(people);

// String[] names = ac.getBeanDefinitionNames();
// for (String string : names) {
// System.out.println(string);
// }

6、Spring创建对象的三种方式

6.1、通过构造方法创建(分为有参构造创建和无参构造创建)

无参构造创建是默认情况,有参构造创建则需要提供有参构造方法,如果有多个构造函数,则使用的是最后一个有参构造函数:

<bean id="peo" class="com.bjsxt.pojo.People">
<!-- ref 引用另一个bean value 基本数据类型或String 等-->
<constructor-arg index="0" name="id" type="int"  value="123"></constructor-arg>
<constructor-arg index="1" name="name"  type="java.lang.String" value="张三"></constructor-arg>
</bean>

其中index 表示参数的索引,从0 开始;name:表示参数名;type:类型(区分开关键字和封装类int 和Integer)

6.2、通过实例工厂创建(先要创建工厂,然后才能生产对象)

必须先要有个实例工厂的

public class PeopleFactory {
        public People newInstance(){
                 return new People(1,"测试");
                 }
          }

然后在配置文件(applicationContext.xml)中配置工厂的对象以及需要创建的对象

<bean id="factory"
class="com.myhexin.pojo.PeopleFactory"></bean>
<bean  id="peo1"  factory-bean="factory"   factory-method="newInstance"></bean>
6.3、通过静态工厂创建

不需要创建工厂的对象先,可以快速创建对象
在上面的方法基础上加个static(就变成了静态工厂)

public class PeopleFactory {
        public  static People newInstance(){
                 return new People(1,"测试");
                 }
          }

然后在配置文件(applicationContext.xml)中直接使用该方法,而不需要先实例化工厂。

<bean id="peo2" class="com.myhexin.pojo.PeopleFactory"  factory-method="newInstance"></bean>

7、给Bean属性赋值(注入)

7.1、通过构造方法设置值(用value赋值)
7.2、设置注入(使用set方法)

7.2.1、如果属性类型是基本数据类型,则直接通过name-value来设置注入

<bean id="peo" class="com.myhexin.pojo.People">
<property name="id" value="222"></property>
<property name="name" value="张三"></property>
</bean>

7.2.2、如果属性是Collection(集合类型),如(list),其他的差不多,只是更改一下标签。

<property name="list">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>

7.2.3、如果属性是map

<property name="map">
<map>
<entry key="a" value="b" >
</entry>
<entry key="c" value="d" >
</entry>
</map>
</property>

8、DI

8.1、中文名称:依赖注入 英文名称:(Dependency Injection)
8.2、什么是DI:DI和上面的IOC是一样的,当一个类中需要依赖另一个类的对象时,把另一个类的对象赋值给这个类的过程就叫DI(依赖注入)。
<bean id="peo" class="com.myhexin.pojo.People">
<property name="desk" ref="desk"></property>
</bean>
<bean id="desk" class="com.bjsxt.pojo.Desk">
<property name="id" value="1"></property>
<property name="price" value="12"></property>
</bean>

9、总结

Spring是一个容器,程序员把所有的创建类的对象的操作都交给这个容器来管理,随着配置文件的加载,里面的所有实例化对象也就随即生成了,这样就实现了对象管理和程序员之间的最大解耦的作用。
Spring存在的意义是为了让其他的技术能够更加方便的使用,比如Mybatis,把所有繁琐的创建工作都交给Spring来完成,程序员就能够更高效的开展进一步的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值