zoukankan      html  css  js  c++  java
  • 【Spring 1】Spring简介

    一、Spring简介

    首先,Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性的角度而言,绝大部分Java应用都可以从Spring中受益。总结说来,Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。其架构图如下:


    其使用步骤:

    1、spring的依赖包配置,以下三个包都是必须的:
    /dist/spring.jar
    /lib/log4j/log4j-1.2.14.jar
    /lib/jakarta-commons/commons-logging.jar


    2、提供spring配置文件applicationContext.xml


    3、提供log4j.properties配置文件

    二、为什么使用spring

    spring一个很重要的特性就是控制反转,在目前的运用中个,控制反转还是我使用spring的一个重要原因。那么,什么是控制反转?

    2.1,控制反转

    控制反转(Inversion of Control ,Ioc):所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护由外部容器来负责。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。

    那么在我们最初没有使用spring的时候,我们每次使用一个对象,都要使用关键字new 去实例化我们的具体类。比如说,我们的DAO层有一个MySQL的实现,我们在调用的时候,会new一个mysql的实现类。但如果需求发生了变化,我们需要将数据库的实现变为Oracle等,那么我们要重新写DAO的实现,并且去程序里面修改所有的new出来的对象,这样子,就带来了很多麻烦。而spring实现了控制反转,以依赖注入的形式去创建对象。使用spring,我们不需要使用new关键字去实例化一个新的对象,只需要在配置文件中进行类的注入,就可以完成对象的创建。当我们需要更改的时候,则只需要更改配置文件的注入实例即可。

    PS:spring的注入形式:1.setter方法注入;2.使用构造器注入;3.使用Field注入(用于注解方式)

    2.2,实例解析

    首先,建立一个java程序(非必须java程序):


    其次,看spring的主要配置:applicationContext.xml文件

    <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
    
    	<bean id="userDao4Mysql" class="com.angel.spring.dao.UserDao4MySqlImpl"></bean>
    
    	<bean id="userDao4Oracle" class="com.angel.spring.dao.UserDao4OracleImpl"></bean>
    
    	<bean id="userManager" class="com.angel.spring.manager.UserManagerImpl">
    		<property name="userDao" ref="userDao4Oracle" />
    	</bean>
    </beans>
    </span>
    然后,看manager层对于dao层的调用:

    <span style="font-family:KaiTi_GB2312;font-size:18px;">package com.angel.spring.manager;
    
    import com.angel.spring.dao.UserDao;
    
    public class UserManagerImpl implements UserManager {
    	
    	private UserDao userDao;
    
    	public void addUser(String username, String password) {
    		 userDao.addUser(username, password);
    	}
    
    	public void setUserDao(UserDao userDao) {
    		this.userDao = userDao;
    	}
    }
    </span>
    最后,是客户端对于manager层的调用

    <span style="font-family:KaiTi_GB2312;font-size:18px;">package com.angel.spring.client;
    
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.angel.spring.manager.UserManager;
    import com.angel.spring.manager.UserManagerImpl;
    
    public class Client {
    
    	public static void main(String[] args) {
    		// 读取配置文件
    		BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
    
    		UserManager userManager = (UserManager) factory.getBean("userManager");
    		userManager.addUser("Angel", "123");
    	}
    
    }</span>
    可以发现的是,当我们使用spring控制反转,依赖注入的形式去组建我们的系统时,我们不再使用new关键字去定位我们需要的对象。而是统一通过配置文件的形式去注入我们需要的实例,这样子,当我们的系统需要更改的时候,就容易方便很多。而且,大大降低了系统的侵入性!


    三、总结

    spring的使用能给我们带来很多的好处,比如:1,降低组件之间的耦合度,实现软件各层之间的解耦;2,可以使容器提供众多服务如事务管理消息服务处理等等。当我们使用容器管理事务时,开发人员就不需要手工 控制事务,也不需要处理复杂的事务传播;3,容器提供单例模式支持,开发人员不需要自己编写实现代码;4,容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能;5,集成其他主流框架等等。但是,选择一种架构、一种技术的依据是基于实践的证据——来自历史项目或亲自试验的经验,而不是任何形式的偶像崇拜或者门户之见,这就是“循证架构”——Evidence-based architecture。



  • 相关阅读:
    Linux内核RPC请求过程
    二分图
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 文本加密
    Java蓝桥杯 算法提高 九宫格
    Java蓝桥杯 算法提高 九宫格
  • 原文地址:https://www.cnblogs.com/hhx626/p/6010311.html
Copyright © 2011-2022 走看看