写点什么

头条「2020 最新」Spring 最易学习教程,百度 java 面试经验

用户头像
极客good
关注
发布于: 刚刚

1 注入补充

1.1 null 值

当需要显式的为属性赋值为 null 时,通过 null 标签完成。


<bean?id="u"?class="com.bcl.entity.User">??<constructor-arg?value="1"?index="0"/>??<constructor-arg?value="xiaohei"?index="1"/>??<constructor-arg?index="2"><null/></constructor-arg></bean>

1.2 内部 bean

<bean?id="a"?class="com.bcl.entity.Address"><property?name="street"?value="文化路"/><property?name="city"?value="硅谷"/></bean>


<bean?id="p"?class="com.bcl.entity.Person"><property?name="personId"?value="1"/><property?name="personName"?value="xiaohei"/><property?name="addr"?ref="a"/></bean>


可以使用内部 bean 替换的写法<bean?id="p"?class="com.bcl.entity.Person"><property?name="personId"?value="1"/><property?name="personName"?value="xiaohei"/><property?name="addr"?><bean?class="com.bcl.entity.Address"><property?name="city"?value="郑州"/><property?name="street"?value="文化路"/></bean></property></bean>

2 FactoryBean 技术(创建复杂对象)

2.1 FactoryBean 引言

Spring 工厂要管理程序中各种种类的对象。


2.2 FactoryBean 的开发步骤

  1. 编码 实现 FactoryBean 接口


public?class?ConnectionFactoryBean?implements?FactoryBean<Connection>?{@Override//返回复杂对象 public?Connection?getObject()?throws?Exception?{//1?加载驱动 Class.forName("com.mysql.jdbc.Driver");//2?建立连接 String?url="jdbc:mysql://localhost:3306/bcl2002?useUnicode=true&characterEncoding=utf8";String?username="root";String?password="root";Connection?conn?=?DriverManager.getConnection(url,?username,?password);return?conn;}@Override//返回复杂对象的类型 public?Class<?>?getObjectType()?{return?Connection.class;}@Override//复杂对象是否单例??true:单例??false:多例 public?boolean?isSingleton()?{return?true;}}


  1. 配置


注意:


  • 根据 id 获取到的复杂对象,不是 FactoryBean

  • 可以根据 &id 获取到 FactoryBean

  • 复杂对象的单例与否,只与 isSingleton 方法有关

3 Spring 中对象的生命周期(了解)

生命周期: 从生到死的过程。


  1. 多例时 (scope="prototype")


对象在 getBean 时创建


  1. 单例时(scope="singleton")


对象在工厂创建时随之创建初始化:init-method:对象创建后,执行 1 次方法销毁:destroy-method:对象销毁时,执行 1 次的方法对象在工厂关闭时销毁

4 Spring 配置文件分析

4.1 Spring 配置文件的拆分

应用复杂时,需要将配置文件拆分成多个小的配置文件,放置到不同模块,最后在总配置文件中通过import标签引入其它的小配置文件。


<import?resource="classpath:a/applicationContext-a.xml"/><import?resource="classpath:b/applicationContext-b.xml"/>

4.2 Spring 中 xsd 文件

xsd(XML Schema Definition)文件,规定了一个 xml 可以使用哪些标签、哪些属性,以及它们的顺序。


  1. xsd 的基本使用



使用 xsd 文件,要配置 xsd 的命名空间,以及文件路径对。


  1. 在一个 xml 中使用多个 xsd



  1. 示例:


4.3 Spring 配置文件中拆分 jdbc.properties

  1. 抽取 jdbc.properties


jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/bcl2002?useUnicode=true&characterEncoding=utf8jdbc.username=rootjdbc.password=root


  1. 读取配置文件


context:property-placeholder?location="classpath:jdbc.properties"/


  1. 使用 jdbc.properties 中的参数


<bean?id="conn"?class="com.bcl.


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


factory.ConnectionFactoryBean"><property?name="driverClassName"?value="{jdbc.url}"/><property?name="username"?value="{jdbc.password}"/></bean>


注意:${username} 会优先读取操作系统用户名,可以给参数添加前缀进行区分。

5 Spring IOC 和 DI

IOC(Inversion Of Control)控制反转 (思想)


DI(Dependency Injection)依赖注入 (实现手段)


控制:对于对象属性赋值的控制权力。



正向控制的问题:强耦合。


解决方案:控制反转。



结论:要解耦合,就不要 new,转为在 spring 配置文件中通过配置的方式由工厂创建对象。

6 Spring 整合 Struts2

准备工作:创建好一个可运行的 struts2 项目。

6.1 整合效果


Spring 整合 Struts2 的效果:由 Spring 工厂创建 Struts2 需要的 Action 和 Service.

6.2 实战

导入spring-web 依赖


<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.3.26.RELEASE</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>2.3.16.3</version></dependency>


  1. tomcat 启动应用时,自动创建 Spring 工厂


web.xml


<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>


  1. Struts2 从 Spring 工厂中获取 Action


applicationContext.xml


<bean?id="userService"?class="com.bcl.service.impl.UserServiceImpl"/><bean?id="userAction"?class="com.bcl.action.UserAction"?scope="prototype"><property?name="userService"?ref="userService"/></bean>


struts.xml


7 Spring 整合 JUnit

之前的 JUnit 测试 Spring 框架,每次都需要读取配置文件,创建工厂,测试繁琐。


解决方案:使用 spring-test 进行测试


准备工作:


<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId>

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
头条「2020最新」Spring最易学习教程,百度java面试经验