初识spring到搭建IoC环境

  • 什么是Spring

  • Spring框架结构

  • Spring优势

  • 使用Spring

    • ApplicationContext类

    • 创建bean的三种方式

    • 基于xml的IoC环境搭建

    • 分析


什么是Spring

Spring是分层的Java SE/Java EE应用的full-stack轻量级开源框架,以IoC(Inverse Of Control 反转控制)和AOP(Aspect Oriented Programing 面向切面编程)为内核,提供了表现层(View)Spring MVC和持久层Spring JDBC以及业务层事务管理的众多的企业级应用技术,还能整合开源世界众多知名的第三方框架和类库,逐渐成为是哎哟个最多的Java EE企业应用的开源框架。官网


Spring框架结构

初识spring到搭建IoC环境


Spring优势

  • 降低耦合,简化开发。

    • 通过Spring提供IoC容器可以讲对象之间的依赖关系交给Spring控制,避免硬编码造成的过度的程序耦合。程序员不必在位单例模式类、属性文件解析等这些底层的需求编写代码,可以更专注与上层应用。

  • AOP编程的支持

    • 通过Spring的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应对。

  • 声明式事务的支持

    • 通过声明(配置)的方式灵活的进行事务的管理,提高开发效率和质量

  • 方便程序的测试

    • 可以用非容器依赖的编程方式进行几乎所有的测试工作,测试编的简单容易

  • 方便集成各种优秀的框架

    • Spring可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、Hessian、Quartz……)的直接支持

  • 降低Java EE API的使用难度

    • Spring对Java EE API(如 JDBC、JavaMail、RPC等)进行了封装,使这些API的使用难度大大降低


使用Spring

基于xml的IoC环境搭建

  1. 新建maven工程,在pom.xml中导入spring依赖,依赖关系可直接在maven仓库官网中去复制 maven仓库

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>

下载成功后,如下: 初识spring到搭建IoC环境

图中的spring-jcl 包是apache的日志框架

打开maven中依赖关系视图查看当前项目的依赖结构如下: 初识spring到搭建IoC环境

  1. 创建serverce类和serverceImpl类

server类:

public interface IUserServerce {

public void updateUser();
}

实现类:

public class UserServerceImpl implements IUserServerce {
public void updateUser() {
System.out.println("用户信息更新成功");
}
}
  1. 创建测试类

public class IoCTest {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
IUserServerce userSvc = (IUserServerce) applicationContext.getBean(IUserServerce.class.getName());
userSvc.updateUser();
}
}

执行测试程序结果如下: 初识spring到搭建IoC环境


分析

ApplicationContext类

光标停留在ApplicationContext类上,右键,选择Diagrams命令、Show Diagrm查看依赖关系的UML图

初识spring到搭建IoC环境

初识spring到搭建IoC环境

  1. 可以看到,ApplicationContext是实现了BeanFactory的,那么这两个核心Core(容器)接口有什么区别?

    • ApplicationContex:在构建容器时,采用即时加载的策略创建对象,在读取完配置文件后,立刻就创建了配置的所有对象。适用于单例模式

    • BeanFactory:在构建容器时,采用延时加载策略创建对象,在获取对象时,才创建对象。适用多例模式,按需加载

  1. ApplicationContex的实现类 在UML图中右键ApplicationContext,选择Show Implementions

初识spring到搭建IoC环境

初识spring到搭建IoC环境

在测试程序用是实现类ClassPathXmlApplicationContext,从图中看到类似的实现类还有 初识spring到搭建IoC环境

  1. 那么这3个实现类有什么区别?

    • ClassPathXmlApplicationContext:加载类路径下的配置文件,如果配置文件不存在于类路径下,加载失败

    • FileSystemXmlApplicationContext:加载磁盘中的配置文件(必须要有访问权限),但是项目部署后,不能保证每台机器(服务器)都有指定的磁盘,因此局限性太大

    • AnnotationConfigApplicationContext:用于读取注解创建容器


创建bean的三种方式

  1. 使用默认构造函数创建,配置如下:

 <bean id="serverce.IUserServerce" class="serverImpl.UserServerceImpl"></bean>

实现类如下:

public class UserServerceImpl implements IUserServerce {
public void updateUser() {
System.out.println("用户信息更新成功");
}
}

执行结果如下: 初识spring到搭建IoC环境

问题:实现类中并没有写构造函数,那怎么执行成功的?

答:java中默认无参构造,当不重载构造函数时,默认调用无参构造,且午餐构造可省略不写。当重写了构造函数后,必须手动添加无参构造,否则此方式创建bean,会抛出异常

初识spring到搭建IoC环境

添加了无参构造后,执行成功: 初识spring到搭建IoC环境

问题:当使用某个jar包中的类,它没有构造函数,又不能修改,此时怎么创建bean?代码如下:

/**
* 模拟使用jar包中的类
*/

public class NewJar {
public IUserServerce getUserSvc(){
return new UserServerceImpl();
}
}

该怎么获取到IUserServerce的对象?直接new一个NewJar,然后获取?注意我们需要的是IUserServerce的对象,并不需要NewJar的对象,但是却创建了一个我们不需要的对象。方式2解决这个问题。

  1. 使用普通工厂方式创建

<!--    方式2. 使用普通工厂方式创建-->
<bean id="factory.NewJar" class="factory.NewJar"></bean>
<bean id="serverce.IUserServerce" factory-bean="factory.NewJar" factory-method="getUserSvc"></bean>

执行结果如下: 初识spring到搭建IoC环境

有了第二种方式,引发出第三种方式。

  1. 使用工厂的静态方法创建

<bean id="serverce.IUserServerce" class="factory.NewJar" factory-method="getUserSvc"></bean>

执行结果如下: 初识spring到搭建IoC环境

~初识spring到搭建IoC环境未完待续初识spring到搭建IoC环境~

原文始发于微信公众号(程序员玄之):初识spring到搭建IoC环境

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/43021.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!