`

开源框架Spring详解---IoC控制反转(一)

 
阅读更多
开源框架Spring详解---IoC控制反转(一)
 
spring在英文里有春天、弹簧、跳跃和泉眼的意思。Spring 也表示是一个开源框架,是为了解决企业应用程序开发复杂性由Rod Johnson创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
 
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
  目的:解决企业应用开发的复杂性
  功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
  范围:任何Java应用
  简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
  轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
  控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
  面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
  容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
  框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。  
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。
 下面就搭建一个简单的Spring项目:
1、首先要引入Spring的jar包。
Spring有两个jar包:
spring.jar
commons-logging.jar
2、然后写一个xml文件,这个xml文件可以随便起名字,但是Spring的官方网站就是写的是applicationContext.xml.所以我们最好也写成application.xml
 
 
Xml代码  
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">  
  
  
   <!-- 配置一个bean 指明bean id class property属性 value属性值 加载这个文件的时候 进行初始化 (需要根据bean的配置)-->  
    <bean id="greetingServiceImpl" class="cn.csdn.service.GreetingServiceImpl">  
       
     <!-- 通过构造器参数的索引位置匹配方法 索引位置从0开始  
     <constructor-arg index="0">  
       <value>z_xiaofei168</value>  
     </constructor-arg>  
      
     <constructor-arg index="1">  
       <value>你好!</value>  
     </constructor-arg>  
       
      -->  
        
     <!-- 通过构造器的参数类型匹配方法进行注入 -->  
       
      
     <constructor-arg type="java.lang.String">  
       <value>你好!</value>  
     </constructor-arg>  
       
     <constructor-arg type="java.lang.String">  
       <value>z_xiaofei168</value>  
     </constructor-arg>  
  
     <!-- 通过set方法进行注入,必须在你类中有对应的set方法   
      <property name="say">  
          <value>你好!</value>  
      </property>  
      -->  
    </bean>  
  
</beans>  
 
 
3、再次写service层:
 
         GreetingService.java
 
Java代码  
package cn.csdn.service;  
  
public interface GreetingService {  
      
    public void say();  
  
}  
 
GreetingServiceImpl.java 
 
 
Java代码  
package cn.csdn.service;  
  
public class GreetingServiceImpl implements GreetingService {  
      
    /**私有属性*/  
    private String say;  
      
    /**在定义一个私有的属性*/  
    private String name;  
  
    /** 
     * IOC依赖注入的方式 
     * 2、通过构造器注入 
     * */  
    public GreetingServiceImpl(String name,String say){  
        this.name=name;  
        this.say=say;  
    }  
      
    @Override  
    public void say() {  
        System.out.println("你给"+name+"打的招呼是:"+say);  
    }  
      
    /** 
     * IOC依赖注入的方式 
     * 1、通过setter方法实现的 
     * */  
    /**set方法进行初始化的工作*/  
    public void setSay(String say){  
        this.say=say;  
    }  
      
}  
  
 
 4、最后写个测试类来测试:
 
Java代码  
package cn.csdn.junit;  
  
import org.junit.Test;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
import org.springframework.context.support.FileSystemXmlApplicationContext;  
  
import cn.csdn.service.GreetingService;  
  
  
public class GreetingTest {  
      
    /**测试GreetingServiceImpl的方法*/  
    @Test  
    public void test1(){  
        /**加载spring容器  可以解析多个配置文件 采用数组的方式传递*/  
        ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});  
        /**IOC的控制反转体现*/  
        GreetingService greetingService = (GreetingService) ac.getBean("greetingServiceImpl");  
       
        greetingService.say();  
    }  
      
    @Test  
    public void test2(){  
        ApplicationContext ac = new FileSystemXmlApplicationContext(new String[]{"src/applicationContext.xml"});  
          /**IOC的控制反转体现*/  
        GreetingService greetingService = (GreetingService) ac.getBean("greetingServiceImpl");  
       
        greetingService.say();  
    }  
  
}  
 
 
 
5、在控制台的显示结果是:
 
你给z_xiaofei168打的招呼是:你好!

 

分享到:
评论

相关推荐

    2024嵌入式大厂面经C++首创

    2024嵌入式大厂面经C++首创提取方式是百度网盘分享地址

    C++ 高性能爬虫代码,带UI

    C++ 高性能爬虫代码,带UI

    2024嵌入式面试资料裕日软件C笔试题

    2024嵌入式面试资料裕日软件C笔试题提取方式是百度网盘分享地址

    黑色素瘤分类数据集10015张7类别.7z

    数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):10015 分类类别数:7 类别名称:[“0”,“1”,“2”,“3”,“4”,“5”,“6”] 更多信息:blog.csdn.net/FL1623863129/article/details/139561265

    2024年高尿酸及痛风疾病医药行业分析报告.pptx

    行业报告

    自由生活条件中老年人体力活动的分类研究

    体力活动对老年人的身心健康有很大影响。研究表明 65 岁以上的老年人缺少必要的体力锻炼,会增加跌倒的风险、会阻碍行动、会降低肌肉力量和丧失自主能力。积极的生活方式有助于老年人降低残疾和慢性病的风险,从而提高老年人的身心健康和幸福指数。世界卫生组织的一份报告表示,积极运动的老年人肌肉适应力强,器官功能正常,因此他们跌倒的风险比较低,并且拥有很高的认知能力。世界卫生组织建议老年人每周进行 30 分钟或 30 分钟以上的体力活动,每周 5 次不低于 10 分钟的适度体力活动或高水准的体力活动,来确保老年人的健康需求。因此,通过长期对日常活动等数据特征分析,可以更好的规划出,每天体力活动和久坐的时间比,从而提高老年人生活的质量。近年来,由于可穿戴设备在加工率、电池寿命、小型化和成本效益等方面的科技进 步,可穿戴监控设备得到快速发展。在过去的几年里,我们做了大量的工作,利用加速计、陀螺仪等惯性传感器设备,对老年人的体力活动进行监督测量。大多数现有的系统都是根据青少年指标获得数据集进行开发验证的,很少有系统将老年人纳入其数据采集范围。Rosario 等研究人员,用 PAC 系统对年轻人进行测试,并

    上市公司污染排放当量(2007-2022).xlsx

    详细介绍及样例数据:https://blog.csdn.net/T0620514/article/details/139567890

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本116.0.5841.0)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom116.0.5841.0 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver116.0.5841.0 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    2024嵌入式面试资料禾赛科技2021嵌入式开发

    2024嵌入式面试资料禾赛科技2021嵌入式开发提取方式是百度网盘分享地址

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本115.0.5790.90)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom115.0.5790.90 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver115.0.5790.90 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    华为OD机试C卷- 欢乐的周末(Java & JS & Python & C).md-私信看全套OD代码及解析

    私信博主免费看所有华为OD真题、考试报告、手撕代码、面试记录

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本115.0.5773.4)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom115.0.5773.4 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver115.0.5773.4 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    2023全球财富报告(英)-2023-76页.pdf

    2023全球财富报告(英)-2023-76页.pdf

    2024嵌入式面试资料指针经验总结

    2024嵌入式面试资料指针经验总结提取方式是百度网盘分享地址

    C++ MPI多进程并发

    C++ MPI多进程并发

    毕设:企业员工绩效考评系统的设计与实现-java语言的前后端分离的webapp

    本项目是java语言的前后端分离的webapp: ● 前端:html+mui+jquery,HBuilder开发,nginx部署 ● 后端:jdk8+springboot+mybatisPlus,idea开发,tomcat部署 ● 由于前后端分开开发,会产生跨域问题,故开发中用nginx做代理服务器 企业员工绩效考评系统是一个涉及人力资源管理、数据分析和技术实现的复杂项目。使用Java语言进行前后端分离的Web应用开发是一个不错的选择,因为它能够提供稳定、可扩展和易于维护的解决方案。以下是一个基于Java语言的企业员工绩效考评系统的设计与实现建议: 1. 需求分析 用户角色:确定系统的主要用户角色,如员工、部门经理、人力资源部门等。 核心功能: 员工自我评估:员工可以定期进行自我评估,提交工作表现和目标完成情况。 上级评估:部门经理可以对下属员工进行绩效评估,并提供反馈。 数据汇总与分析:人力资源部门可以汇总员工绩效数据,进行统计分析和报告生成。 实时通知与提醒:系统能够及时通知员工和管理者有关绩效评估的相关信息。 2. 技术选型 前端:HTML5、CSS3、JavaScript(可

    2024嵌入式面试资料2022交大捷普社招-C开发

    2024嵌入式面试资料2022交大捷普社招-C开发提取方式是百度网盘分享地址

    毕业设计-基于四元数变换的彩色图像水印算法设计与实现.zip

    毕业设计-基于四元数变换的彩色图像水印算法设计与实现. 题目:基于四元数变换的彩色图像水印算法设计与实现 ● 变换算法: QDFRNT, 四元数分数阶随机变换 、 QDFRFT, 四元数分数阶傅里叶变换 ● 水印算法: ● 基于 SVM 的自适应彩色图像水印算法 ● 基于量化的自适应彩色图像水印算法 ( TODO ### 一、引言 #### 1.1 研究背景 随着数字技术的飞速发展和广泛应用,图像已成为信息传播的重要形式之一。然而,由于图像易于复制和篡改,版权保护问题日益突出。水印作为一种有效的版权保护手段,通过在图像中嵌入不易察觉的标志或图案来标识图像的所有权,从而防止未经授权的复制和分发。传统的水印方法主要依赖于像素级别的操作,如改变图像的颜色或纹理,但这些方法容易被分析和去除。近年来,四元数变换作为一种非线性几何变换,被应用于图像处理领域,为水印算法的改进提供了新的思路。 #### 1.2 研究目的 本研究的目的是设计和实现一种基于四元数变换的彩色图像水印算法。通过在水印图像上施加四元数变换,使得水印对原图像的视觉质量影响最小,同时提高算法的鲁棒性,使其能够在多种图像处理操作(

    2024年小型通用减速机行业分析报告.pptx

    行业报告

    华为OD机试C卷- 迷宫问题(Java & JS & Python).md-私信看全套OD代码及解析

    私信博主免费看所有华为OD真题、考试报告、手撕代码、面试记录

Global site tag (gtag.js) - Google Analytics