spring-第一章-基本用法

一,简介

spring是一个开源框架

是一个非常强大的容器框架,分离项目组件之间的依赖关系,由spring容器管理整个项目的资源和配置;

通常我们可以称spring是容器大管家(项目大管家)

功能:

  (1)  控制反转(IOC)

  (2)AOP变成的支持

  (3)事务的事务

  (4)依赖注入(DI)

  (5)对其他web框架的支持(struts2,hibernate.......)

二,控制反转(IOC)

IOC:inversion of control

  spring的核心,对于spring框架来说,就是由spring来控制对象的生命周期和对象间的关系;

  所有的类都会在spring容器中登记,告诉spring你是一个什么东西,你需要什么东西,然后spring 在系统运行到合适的时候,把你需要的东西主动给你,同时也把你提供给需要你的东西;

所有类的创建,销毁都由spring来控制,也就是说控制对象的生命周期不再是由引用它的对象,而是spring;

  对于某个具体的对象而言,以前是他控制器他对象,而现在是所有的对象都被spring控制,所以称之为控制反转;

三,依赖注入(DI)

  IOC的一个重点是系统在运行时,动态的向某个对象提供它所需要的其他对象,这点是通过DI(Dependency Injectioin ,依赖注入)来实现的;

  比如对象A需要操作数据库,以前我们可能就是在A中自己编写代码提供一个Connection对象,有了spring之后,我们只需要告诉spring,A需要一个Connection对象,

至于这个Connection对象到底如何来的,A需要知道;在系统运行到某个时候,spring就会给A提供Connection对象,像打针一样,把Connection对象注入到A中,依赖注入的名称

就是这样来的;

  那么DI底层实现是通过什么技术?反射

四,IOC和DI

  IOC是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机由我们自己把控,而现在这种权利转移给spring框架

  DI其实是IOC的另一种说法,控制的什么被反转了?就是获取对象的方式被反转了

  IOC设计模式,DI是IOC设计模式的一种实现;(ORM hibernate)

五,下载

https://repo.spring.io/libs-release-local/org/springframework/spring/

六、spring入门

1、jar包

需要额外导入lombok.jar

2、User类

@Data
public class User {
    private String name;
    private int age;
}

3、src新建beans.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.xsd">

</beans>

4、在beans.xml中配置bean实例

<!-- 声明bean实例,相当于是一个对象,id:唯一标识,class:类全名 -->
    <bean id="user1" class="com.yujun.po.User">
        <!-- 类中的属性    name:属性名    value:属性值 -->
        <property name="name" value="小明"></property>
        <property name="age" value="20"></property>
    </bean>

5、测试

public class Demo1 {

    public static void main(String[] args) {
        //通过beans.xml配置文件,创建应用上下文对象,可以当做是spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        //通过配置文件中bean的id得到bean对象
        User user1 =  (User) context.getBean("user1");
        System.out.println(user1);
    }

}

使用上述代码运行,会抛出下面截图中异常,原因是缺少一个commons-logging-xx.jar

请自行在项目中导入commons-logging-xx.jar

如果使用maven构建项目,请添加下面的依赖

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
            <scope>provided</scope>
        </dependency>

6、构造方法赋值

(1)需要给User中提供一个带参数的构造方法

public User(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

也是用使用lombok中的@AllargsControctor也可以

(2)在beans.xml中配置

<bean id="user2" class="com.yujun.maven.po.User">
        <!-- 通过构造方法给属性赋值    index:构造方法中参数的下标    value:参数值 -->
        <constructor-arg index="0" value="小红"></constructor-arg>
        <constructor-arg index="1" value="21"></constructor-arg>
</bean>

七、依赖注入案例

我们这里以员工和部门为例,员工属于某个部门,在spring中,怎么把某个部分注入给员工?

1、实体类

@Data
public class Dept {
    private int id;
    private String name;
}
@Data
public class Emp {
    private int id;
    private String name;
    private Dept dept;
}

2、beans.xml

<bean id="dept1" class="com.yujun.maven.po.Dept">
        <property name="id" value="1"></property>
        <property name="name" value="开发部"></property>
    </bean>

    <bean id="emp1" class="com.yujun.maven.po.Emp">
        <property name="id" value="100"></property>
        <property name="name" value="小黑"></property>
        <!-- ref:表示引用spring容器中存在bean的id,也就是依赖注入 -->
        <property name="dept" ref="dept1"></property>
    </bean>

3、测试

Emp emp1 = (Emp) context.getBean("emp1");
System.out.println(emp1);

八、注入方式

在刚才我们使用ref属性,指定bean的id,这种方式就是默认的,当让也是常用,也是推荐的一种方式;

下面我们介绍其他的注入方式;

1、autowire=”default”

此方式就是默认的配置,也是推荐大家使用的方式;也就是需要我们在bean的property节点中通过ref属性来指定依赖的bean的id

2、autowire=”byName”

此方式通过名称注入,必须让bean的id和类中属性名一样

3、autowire=”byType”

此方式通过类型注入,和依赖的bean的id没有关系,但是需要保证类型的bean在spring容器中只有一个,否则抛异常

4、小结

注入方式,通常默认配置,需要我们手动使用ref属性指定bean的id

九、bean的作用域

bean被spring容器管理后,可以通过scope属性来指定作用域,也就是bean的作用的范围;

通常取值:singletion、prototype、request、session,我们主要介绍前两个

1、scope=”singletion”

这是默认值,表示单例,也就是bean在spring容器中只有一个对象实例

2、scope=”prototype”

此方式表示多例,bean在spring容器中会产生N个对象实例

在后面讲解spring+struts2时,需要把struts2的action的此属性设置多例

十、注入集合数据

1、实体类

@Data
public class ListBean {
    private List<String> list;
    private Set<String> set;
    private Map<String,Integer> map;
}

2、beans.xml

<bean id="list1" class="com.yujun.maven.po.ListBean">
        <property name="list">
            <list>
                <value>小明</value>
                <value>小红</value>
                <value>小黑</value>
            </list>
        </property>

        <property name="set">
            <set>
                <value>aaa</value>
                <value>bbb</value>
                <value>ccc</value>
            </set>
        </property>

        <property name="map">
            <map>
                <entry key="a1" value="10"></entry>
                <entry key="a2" value="20"></entry>
            </map>
        </property>
</bean>

3、测试

ListBean list = (ListBean) context.getBean("list1");
System.out.println(list);

十一、其他配置

在bean标签中添加设置下列属性

1、lazy-init=”true”

配置当前bean是否懒加载,默认是false

2、init-method=”方法名”

bean被实例化后执行的初始化方法

3、destroy-method=”方法名”

bean被销毁后执行的销毁方法

原文地址:https://www.cnblogs.com/faded8679/p/10786176.html

时间: 2024-10-16 00:38:15

spring-第一章-基本用法的相关文章

Spring 第一章

Spring是一种为了减缓程序开发复杂性开发的一种基于AOP和IOC等思想的集合框架. AOP:(AOP为Aspect Oriented Programming的缩写,即面向切面编程(也叫面向方面),是一种可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. 如下运用了动态代理的实例 Animal.java :委托类(被代理的类),注:委托类实际是一个接口,这里为了方便描述,所以这里用委托类 1 public interface Animal { 2 p

第一章:spring mvc 的hello world -&lt;蒋永录帮帮你&gt;

一:web.xml配置 <!-- Spring MVC配置 --> <servlet> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name&g

第一章 第一个spring boot程序

环境: jdk:1.8.0_73 maven:3.3.9 spring-boot:1.2.5.RELEASE(在pom.xml中指定了) 注意:关于spring-boot的支持, 最少使用jdk7(jdk6也可以,可能需要额外配置,没试过,官方推荐jdk8) maven至少使用3.2 1.首先进入一个文件夹,例如"~/Desktop/project",然后按照"第一章 企业项目开发--maven+springmvc+spring+mybatis+velocity整合"

第一章 spring核心概念

一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被称为依赖注入(Dependency Injection[DI]),是面向对象编程 中的一种设计理念,用来减轻程序代码之间的耦合度. IOC原理:侧重原理 在业务代码中不使用我们之间司空见惯的关键字new来构建一个业务实例,而是在配置文件中.通过xml节点来告知容器如何对内存中构建的对应类型的对象名称

OSGi原理与最佳实践:第一章 OSGi框架简介(2)

OSGi原理与最佳实践:第一章 OSGi框架简介(2) 由  ValRay 发布 已被浏览4884次 共有3条评论 已被3个人收藏 2013-08-16 21:23 顶(0) 踩(0) osgi原理与最佳实践 1.1.4 开发传统类型的应用 1.1.4.1 B/S 我们首先来看一下,如何基于 OSGi 来开发 B/S 结构的应用.B/S 结构应用程序的开发,可有两个选择:一个是在 OSGi 的框架中嵌入 Http 服务器,另外一个是在 Servlet 容器中嵌入 OSGi 框架.下面分别介绍这两

OSGi原理与最佳实践:第一章 OSGi框架简介(5)Spring-DM

OSGi原理与最佳实践:第一章 OSGi框架简介(5)Spring-DM 由  ValRay 发布 已被浏览8409次 共有3条评论 已被2个人收藏 2013-08-16 21:29 顶(1) 踩(0) osgi原理与最佳实践 1.3 Spring-DM 1.3.1 简介 Spring-DM 指的是 Spring Dynamic Modules.Spring-DM 的主要目的是能够方便地将 Spring 框架 和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环

c语言程序设计第一章3

字符数组是C语言中最常用的数组类型.下面我们通过编写一个程序,来说明字符数组以反操作字符数组的函数的用法.该程序读入一组文本行,并把最长的文水行打印出来.该算法的基本框架非常简单: while (还有未处理的行) i f (该行比已处理的最长行还要长) 保存该行 保存该行的长度 打印最长的行 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MAXLENGTH 100//文本的最大长度 4 int getline(char l

iOS开发中的那些的约定俗成(1)————《编写高质量iOS与OS X代码的52个有效方法》读书笔记(第一章)

iOS开发中的那些的约定俗成(1) ----<编写高质量iOS与OS X代码的52个有效方法>读书笔记(第一章) 前言 "我要成为一个高产的开发人员.""想要混的好,就得多努力." 写这些东西是因为毕竟看了书,但是看书看过去之后,也许印象不是很深刻,有些东西现在也理解不了,那我就把我理解的,现在就可以用到的东西,简单的写出来就好,让自己今后看到就能明白其中的意思. 还有就是锻炼一下表达,编辑能力,慢慢的提升自己,随时随地的都要有一个锻炼的心. 最后当然就

第一章:认识Yii

第一章:认识Yii 认识Yii 在过去几年中,框架迅速发展,几乎在Web应用开发中,每个人都会涉及到一个新生框架,Web开发框架会帮助你加快你的应用程序发布,你只需迅速的把你的想法在框架的白板上书写功能代码.随着Web应用的实现具有共同特征,现有的框架方案已经满足这些要求,在今天还有什么理由要从头开始你的下一个Web应用呢?今天的Web开发,除程序自身语言外,一个现代化.灵活的和可扩展的框架,几乎是一个至关重要的编程工具,此外,如果语言与框架两个部份有特别的互补性,结果是将一个非常强大的工具包:

《淘宝技术这十年》读书笔记——第一章 第二章

引言 ? ? 这本书的作者是子柳先生,子柳本名赵超,2004年加入淘宝网.历任开发工程师.项目经理.产品经理.测试经理,2009年随着淘宝系统的大规模重构和人才的迅速扩张,创办了"淘宝技术大学",因培养内外部工程师众多,人称"校长". ? ? 之所以读这本书,主要想了解淘宝的技术/业务发展过程中遇到过哪些问题,以及他们怎么解决的.在阅读的过程中有很多不懂的地方,主要是知识面确实涵盖的太广,就当拓展视野吧. ? ? 第一章 ? ? 淘宝架构初版 ? ? 淘宝的第一版源