| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> spring面试笔记 -> 正文阅读 |
|
[Java知识库]spring面试笔记 |
前言maven引入
bean定义??基本的几个属性值有id、name、class id是唯一指定标识,name可以有多个,class指定bean类型
如果是web服务,IOC容器类型为XmlWebApplicationContext,我是在测试环境下,用ClassPathXmlApplicationContext Person类
?测试代码
scope?1、scope类型在Spring 2.0之前,有singleton和prototype两种; 在Spring 2.0之后,为支持web应用的ApplicationContext,增强另外三种:request,session和global session类型,它们只实用于web程序,通常是和XmlWebApplicationContext共同使用。 1、singleton?此取值时表明容器中创建时只存在一个实例,所有引用此bean都是单一实例。如同每个国家都有一个总统,国家的所有人共用此总统,而这个国家就是一个spring容器,总统就是spring创建的类的bean,国家中的人就是其它调用者,总统是一个表明其在spring中的scope为singleton,也就是单例模型。 此外,singleton类型的bean定义从容器启动到第一次被请求而实例化开始,只要容器不销毁或退出,该类型的bean的单一实例就会一直存活,典型单例模式,如同servlet在web容器中的生命周期。 ? ?单例情况下: ?不能使用共享成员变量 ?, ?在并发情况下本来是true , 但另一线程进来 , 变为false , ?期望结果是true , 并发会导致数据不准确 2、prototype请求方spring容器在进行输出prototype的bean对象时,会每次都重新生成一个新的对象,虽然这种类型的对象的实例化以及属性设置等工作都是由容器负责的,但是只要准备完毕,并且对象实例返回给请求方之后,容器就不在拥有当前对象的引用,请求方需要自己负责当前对象后继生命周期的管理工作,包括该对象的销毁。也就是说,容器每次返回请求方该对象的一个新的实例之后,就由这个对象“自生自灭”,最典型的体现就是spring与struts2进行整合时,要把action的scope改为prototype。 ?属性值为prototype时 , 并发时线程是安全的 如同分苹果,将苹果的bean的scope属性声明为prototype,在每个人领取苹果的时候,我们都是发一个新的苹果给他,发完之后,别人爱怎么吃就怎么吃,爱什么时候吃什么时候吃,但是注意吃完要把苹果核扔到垃圾箱!对于那些不能共享使用的对象类型,应该将其定义的scope设为prototype。 3、request再次说明request,session和global session类型只实用于web程序,通常是和XmlWebApplicationContext共同使用。 Spring容器,即XmlWebApplicationContext 会为每个HTTP请求创建一个全新的RequestPrecessor对象,当请求结束后,该对象的生命周期即告结束,如同java web中request的生命周期。当同时有100个HTTP请求进来的时候,容器会分别针对这10个请求创建10个全新的RequestPrecessor实例,且他们相互之间互不干扰,简单来讲,request可以看做prototype的一种特例,除了场景更加具体之外,语意上差不多。 4、session对于web应用来说,放到session中最普遍的就是用户的登录信息,对于这种放到session中的信息,我们可以使用如下形式的制定scope为session: <bean id ="userPreferences" class="...UserPreferences" ? scope="session" /> Spring容器会为每个独立的session创建属于自己的全新的UserPreferences实例,比request scope的bean会存活更长的时间,其他的方面没区别,如果java web中session的生命周期。 5、global session<bean id ="userPreferences" class="...UserPreferences" ? scope="globalsession" /> global session只有应用在基于porlet的web应用程序中才有意义,它映射到porlet的global范围的session,如果普通的servlet的web 应用中使用了这个scope,容器会把它作为普通的session的scope对待。 总结
2、scope配置1、xml方式进行bean的配置时,指定scope。 2、注解方式前提为配置spring为注解配置。 ?初始化、销毁方法init-method和destroy-method,如下,init和destroy均是Person类的方法,当bean被实例化后会执行init-method绑定的方法,当ioc容器销毁时,会执行destroy-method绑定的方法
工厂创建1、无参构造创建之前的bean定义均是无参构造的应用 2、静态工厂方法创建此时bean里加上一个静态方法 getFighterInstance1,一个实例方法getFighterInstance2
然后applicationContext.xml中通过factory-method来创建
3、成员方法创建这个也简单,是指用一个bean实例的方法来创建另一个bean
【注:】 利用方法来创建实例是非常常见的,如DriverManager创建connector实例 依赖注入 Dependency Injection1、概念编写程序时,通过控制反转把对象的创建交给spring,但是代码中不可能出现无依赖的情况。 IOC解耦只是降低他们的依赖关系,但不会消除。如service层调用dao层 2、注入方法首先因示例关系加入一个class,后面会用
1、构造器注入
2、set注入
【注:】set注入时的property标签的name值是set方法的部分内容,例如setUrl,那么name值为url,即去掉set后首字母大写,我之前一直以为name值是变量值,结果用jdcbUrl错了半天 切分配置文件即主配置文件会引入其它多分配置文件,目的是方便功能区分 1、创建一个分文件 2、beans标签导入 xmlns:p="http://www.springframework.org/schema/p" ?3、导入分文件 ?Spring相关APIapplicationContext接口类型,代表应用上下文,可以通过其实例获得spring容器中的Bean getBean()下面代码是ClassPathXmlApplicationContext的顶级父类AbstractApplicationContext定义的
?从中发现getBean()根据id、name、反射类等属性来获取Bean,其中根据反射类获取必须要求IOC容器中对应类型的bean有且只有一个 实战——Spring配置数据源maven
配置1:jdbc.properties
配置2: applicationContext.xml 其中为了支持导入properties,添加了context依赖 bean调用引入的context依赖?
?测试
Spring注解开发 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/4 6:23:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |