Spring 学习笔记

框架是什么(个人理解,可能有所偏差)

框架,将程序的各功能,不同的组合(配合方式)成为一个运行软件,这个组合方式就是框架;

打个比方,Java是牛肉,SQL数据库是辣椒,Web前端是芹菜,Http是酱油,你用一种炒法将这些组合起来成一道菜,这个炒法就是一个框架,spring是另一种炒法,spring就是另一个框架。

Spring 作用

降低耦合:修改需求时,只需要修改spring.xml配置文件,而不需要修改运行代码

搭建环境

用Spring jar包生成Spring.xml文件,将该文件从Java下移动到Resource包里,里面的Beam对象,产生ID(唯一)和后面的Class类全地址,之后使用AppLicationContext的getBean方法(参数为ID)调用该类

<bean id="a" class="project.a"></bean>

JUnit 单元测试框架

可以使用@Test 将Test方法替代Main方法,而且可以创建多个运行类,方便测试

控制反转

从new对象,到spring容器获取对象,spring接收对象的生命周期控制

依赖注入

用@Resource注解替代了getBean方法

其实控制反转和依赖注入是一回事,从对象角度和应用程序角度有区分

增强

AOP 切面

前置增强

后置增强

异常抛出增强

环绕增强

最终增强

自定义增强

语法

属性注入 proprety方法

必须要有set/get方法

1.基本数据类型(值类型)直接使用Value进行注入

2.引用数据类型(对象型)用ref="对象的beanID"注入

3.可以注入list、set、map、数组

<bean id="a" class="project.a">
    <property name="数据类型" value="值">
    <property name="引用类型" ref="类名">
    <property name="List">           //list  set  写法一样
        <list>
        <value>abc<value>                            //基本类型
        <ref bean="对象BeanID" />                    //引用类型      
        </list>
    </property>
     <property name="map">           //map 里是键值对
        <map>
        <entry key="a" value="b" />                //基本类型
        <entry key="b" value-ref="对象BeanID" />    //引用类型
        </map>
    </property>
</bean>

构造方法注入

constructor 构造函数

<bean id="a" class="project.a">
    <constructor-arg name="name" value="value" />    //根据名称注入,最好的方法
    <constructor-arg index="1" value="value" />      //根据索引位置注入,耦合性高
    <constructor-arg type="type" value="value" />    //根据属性类型注入,耦合性高
</bean>

命名空间注入

需要先引入命名空间

<beans xmlns:p="https://www.springframework.org/schema/p"  />    //头文件引入
<bean id="a" class="project.a" p:name="name" p:age="age" p:obj-ref="obj" />
//缩减了代码,原来的方法体变成了单行代码

工厂注入

使用注解

@Configuration
public class Main {
    @Bean
    public Class1 class1(){
        return new Class1();
    }
    @Bean
    public Class2 class2(){
        Class2 class2=new Class2;
        class2.setName("name");                //设置属性
        class2.setMethod(Method());            //Method 方法    设置方法
        return new class2();
    }
}

生命周期

1.Bean的实例化:

spring启动后,会查找和加载需要被spring管理的Bean,并且实例化。

2.Bean属性注入:

Bean被实例化后对将Bean的引入和值注入到Bean的属性中。

3.调用BeanNameAware的setBeanName()方法:指定ID

如果实现了BeanNameAware接口的话,Spring将Bean的Id传递给setBeanName()方法。

4.调用BeanFactoryAware的setBeanFactory()方法:注入容器(父容器ApplicationContext的父类)

如果Bean实现了BeanFactoryAware接口的话,spring就将调用他们的setBeanFactory()方法,将BeanFactory容器实例传入。

5.调用ApplicationContextAware的setApplicationContext方法:注入容器(spring容器ApplicationContext)

如果Bean实现了ApplicationContextAware接口的话,spring将调用Bean的setApplicationContext方法,将Bean所在用用上下文引用传入进来。

6.调用BeanPostProcessor的预初始化方法:

如果Bean实现了BeanPostProcessor接口,spring将调用他们的postProcessBeforeInitialization()方法。

7.调用InitializingBean的afterPropertiesSet()方法:

如果Bean实现了InitializingBean接口,spring将调用他们的afterPropertiesSet()方法,类似的,如果Bean使用init-method生命了初始化方法的话,这个方法也会被调用。

8.调用BeanPostProcessor的初始化后的方法:

如果Bean实现了BeanPostProcessor接口,spring就将调用他们的postprocessAfterInitialization()方法。

9.Bean可以使用了:

这个时候,Bean就已经准备好了,可以被应用程序使用了,他们将一直驻留在应用的上下文中,直到应用的上下文被销毁。

10.调用DisposableBean的destory()方法:销毁Bean

如果Bean实现DisposableBean接口,spring将嗲用他的destory()就扣方法,相同的,如果Bean使用了destory-method生命销毁方法,该方法也会被调用。

作用域

singleton 单例模式,在整个Spring ioC容器中,只有一个Bean实例

prototype 多例模式,每次GetBean都会得到新的Bean实例,Bean由客户端管理,spring容器不再管理生命周期

request 用于Web环境,每次HTTP请求都会产生新的Bean实例

session 用于Web环境,使用session定义的Bean将会产生新实例

application 用于Web环境,整个系统的ServletCo'ntext创建单例模式

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值