博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring学习笔记(一)
阅读量:6447 次
发布时间:2019-06-23

本文共 2910 字,大约阅读时间需要 9 分钟。

hot3.png

前言

      用了很长时间的Spring了,但发现有些时候一点小细节疏忽导致的错误很久才能找到原因,对Spring的基础知识没有一个系统的整理,所以整理一下Spring的知识,加强记忆也希望可以帮到跟多的人。

Spring Ioc 容器

Ioc(inverse of control)控制反转:对象之间的依赖关系由代码转交给外部容器,降低依赖

Spring通过配置文件描述Bean与Bean之间的依赖关系(3.0还也可以用配置类代替配置文件),利用java的反射机制实例化Bean并建立Bean之间的依赖关系,换句话说Bean的实例化是在程序运行期间完成的,至于Bean在Spring容器(ApplicationContext)初始化时就完成实例化,还是在第一次调用的时候初始化就和bean的作用域以及是否配置延迟加载(lazy-init)有关,具体规则如下:

首先,这里先不考虑bean在web应用上下文中作用域(session、request、global session),现在只考虑singleton(单例)、prototype两种。

1.当在Spring容器(ApplicationContext)默认情况下,即不延迟加载的情况下:

1.1scope=’singleton’(默认)的bean会在Spring容器初始化时就实例化,并缓存于Ioc容器(BeanFactory)中,每次使用时都返回的缓存中的实例,不会创建新的实例

1.2scope=’prototype’的bean会在Spring容器初始化时就实例化的时候创建Bean的实例,并且每调用一次getBean都会产生一个新的实例

2.当在Spring容器配置延迟加载的情况下:

2.1 scope=’singleton’(默认)的bean会在第一次调用时实例化,并缓存于Ioc容器(BeanFactory)中,每次使用时都返回的缓存中的实例,不会创建新的实例

2.2 scope=’prototype’的bean会在第一次调用getBean方法的时候创建Bean的实例,并且每调用一次都会产生一个新的实例

Ioc容器(BeanFactory)与Spring容器/应用上下文(ApplicationContext)区别联系

         ApplicationContext派生至BeanFactory,同时ApplicationContext提供了更多的功能,如自动化BeanPostProcessor注册、自动BeanFactoryProcessor注册、i18n支持、ApplicationEvent发送等;Application默认不延迟加载,而BeanFactory默认延迟加载;所以非特殊情况下,都推荐使用ApplicationContext而非BeanFactory

ApplicationContext初始化

         ApplicationConText ctx = new ClassPathXmlApplicationContext(“配置文件地址”);

         ApplicationConText ctx = new FileSystemXmlApplicationContext(“配置文件地址”);

         ApplicationConText ctx = new AnnotationConfigApplicationContext(配置类);

ClassPathXmlApplicationContext和FileSystemXmlApplicationContext主要的区别是如果不显示的指定资源型前缀,将分别将路径解析为类路径和文件系统路径。在J2SE项目中使用Spring时需要使用上面的ApplicationContext初始化代码,在main方法中初始化或在静态类型中初始化。

         WebApplicationContext的初始化需要在web.xml中使用Servlet或Listener初始化

1.listener

<!-- 指定配置文件-->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext.xml</param-value>

</context-param>

<!-- 声明Web容器监听器-->

<listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

2.Servlet

<!-- 指定配置文件-->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext.xml</param-value>

</context-param>

<!-- 声明自动启动的Servlet-->

<servlet>

         <servlet-name>spring</servlet-name>

         <servlet-class>org.springframework.web.context.ContextLoaderServlet</ servlet-class>

         <load-on-startup>1</ load-on-startup>

</servlet>

Bean的注入

         Bean的注入分为属性注入、构造函数注入、接口注入三种

1.属性注入:

         提供setter方法,同时保证有一个无参的构造函数,java语法规定当类中没有构造函数是,JVM会自动为其生成一个无参的构造函数,但当类中有有参的构造函数是不会在自动生成,这是需要手动的加上一个无参的构造函数。

备注:Spring中会检查Bean中是否有对应的Setter方法,属性不要求;属性变量的命名都是以小写字母开头如speed、maxSpeed等,但是也存在特殊情况如IDCode、IC、ICCard是合法的,即必须满足“变量的前两个字母只能同位小写或者大写”

2.构造函数注入

         提供带需要注入参数的构造方法,配置文件如下配置

(1)根据参数类型注入

         <bean id=”car” class=”com.smart.ditype.Car”>

                   <constructor-arg type=”参数类型” value=””/>

         </bean>

(2)根据参数索引注入

         <bean id=”car” class=”com.smart.ditype.Car”>

                   <constructor-arg index=”索引” value=””/>

         </bean>

(3)接口注入

    接口注入不常用,有兴趣的朋友可以自行了解

先到这里了,休息下再继续

转载于:https://my.oschina.net/u/1413049/blog/192576

你可能感兴趣的文章
JSP内置对象值out对象及其它的一些常见方法
查看>>
Android undefined intent constructor错误?
查看>>
typscript 语法1
查看>>
04 对象与类
查看>>
headfirst python 03, 04
查看>>
Git在Githib和Github上的使用
查看>>
mysql 远程访问 配置
查看>>
今优农场
查看>>
DD_belatedPNG,解决 IE6 不支持 PNG-24 绝佳解决方案
查看>>
mysql常用知识点
查看>>
JAVA学习--反射基本知识
查看>>
Python-RabbitMQ(持久化)
查看>>
从零开始学习Sencha Touch MVC应用之二
查看>>
Javascript详解
查看>>
bzoj 1774: [Usaco2009 Dec]Toll 过路费
查看>>
JAVA实现AES 解密报错Input length must be multiple of 16 when decrypting with padded cipher
查看>>
【矩阵乘法】[NOI2012]随机数生成器 /LuoGu P2044
查看>>
无线认证方案1
查看>>
django实战模拟博客系统
查看>>
使用MySQLMTOP监控MySQL性能
查看>>