spring学习(上)

1.由问题带入Spring

1.1.早期的架构

刚开始的MVC层架构的模式,创建对象的决定权还是在程序员手中

在这里插入图片描述

随着类越来越多,那我们就必须用哪个创建哪个,很费事

在这里插入图片描述

所以我们引入了Set方式

在这里插入图片描述
在这里插入图片描述

我们以这样的方式,将所生成对象的权利交给用户,这样可以大大减少程序员的工作量

1.2.Spring简介

早期的程序员又从中间插入了更多的方式来解决这个问题,在2002年的时候曾出现过一个框架interface21,出现了spring框架的雏形,在不断发展的过程中,在2004年3月24日,基于interface21框架,spring出现了,迎来了我们程序员的春天,他以不一样的构建方式,进入到我们的身边。

spring的优点:

  1. 是一个开源的项目(现在在GitHub)上面
  2. 是一个轻量级的,非入侵式的框架(到时候不使用该框架时,只要修改部分代码,程序仍然可以使用)
  3. 两大重要思想IoC,AOP
  4. 支持事务,容易整合其他框架

1.3.Spring环境搭建

spring framework官网:https://spring.io/projects/spring-framework/

在之前我们一直使用的是meven搭建模式,我们去meven仓库链接spring

在这里插入图片描述

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

一般情况我们还会直接引入jdbc,便于我们后期直接使用

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

1.4.Spring使用

我们将从maven仓库将所需要的包下载下来,就可以开始使用了。

首先我们创建一个hello类,实现我们的spring-helloworld(只包含一个简单的属性和set,get,tostring方法)。

然后开始配置ApplicationContext.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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="..." class="...">  
        <!-- collaborators and configuration for this bean go here -->
    </bean>

    <bean id="..." class="...">
        <!-- collaborators and configuration for this bean go here -->
    </bean>

    <!-- more bean definitions go here -->

</beans>

然后我们就可以直接在这个配置文件中进行配置
在这里插入图片描述

在配置文件中:

  • bean就像之前我们new的对象
  • id就是我们之前的对象名
  • class就是实体类的路径
  • name就是起别名,可以起多个别名
  • property为其中的属性赋值
    • name为属性名
    • value为该属性的值

测试:

在这里插入图片描述

使用ClassPathXmlApplicationContext获得容器对象,在容器加载的时候,配置在容器中的bean都被创建,通过context需要谁获取谁就行。

2.Spring使用

2.1.创建对象的方法

spring默认是通过走对象的无参构造器进行创建对象的,如果有了有参构造器,可以用以下方法进赋值

在这里插入图片描述

在一般情况下,如果我们没有默认无参构造器时,我们采用第二种方式,通过参数名进行赋值。

2.2.ApplicationContext.xml配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GoOuEASp-1603101574420)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201019101031418.png)]

还可以在配置文件中使用import引入其他的配置文件

在这里插入图片描述

2.3.依赖注入(重点)

在这里插入图片描述
在这里插入图片描述

注意:在使用map和property属性是写入参数的关键字

<property name="card">
            <map>
                <entry key="身份证" value="610123456678998520"></entry>
                <entry key="银行卡" value="987654321000000000"></entry>
            </map>
        </property>
<property name="url">
            <props>
                <prop key="driver">driver</prop>
                <prop key="url">locakhost:8080</prop>
                <prop key="username">root</prop>
                <prop key="password">root</prop>
            </props>
        </property>

在这里插入图片描述

2.4.拓展方式注入

拓展注入方式有两种,一个为p注入(使用无参构造器使用,在bean后面直接使用p:字段名,就可以赋值),一个为c注入(使用有参构造器使用,在bean后面直接使用c:字段名,就可以赋值)

 xmlns:p="http://www.springframework.org/schema/p"
 xmlns:c="http://www.springframework.org/schema/c"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5.bean的作用域

作用域scope:一般情况下只使用两个

  • singleton:单例模式
    在这里插入图片描述
    在这里插入图片描述

  • prototype:原型模式(创建出来的都不相同)
    在这里插入图片描述
    在这里插入图片描述

2.6.Bean的自动装配

使用自动装配就是在bean的配置后面加入autowrie属性,其中有两个

  • byName:根据名字进行匹配,在对象set后面的名字必须和bean的名字一致,名字不一致会报错
    -在这里插入图片描述

  • byType:根据类型进行匹配,根据实现类的class寻找bean,可以不加beanid,有多个类会报错
    在这里插入图片描述

在这里插入图片描述

2.7.使用注解自动装配(@Autowired)

第一步:首先需要引入注解的约束

 xmlns:context="http://www.springframework.org/schema/context"


<context:annotation-config/>

在这里插入图片描述

在使用之前,必须先配置好这两个东西

在这里插入图片描述

小结:

@Autowired配置之后,先是根据类型进行匹配,如果有多个类型,则根据名称匹配,如果名称不符就报错。在多个对象的情况下,与@Qualifier(value = “beanid”)进行匹配,如果匹配不上不会根据类型匹配,直接报错。

@Resource(不是spring的注解,是javax的注解)首先会根据名称匹配,匹配不上根据类型匹配,类型匹配不上则报错。在多个类型的情况下使用@Resource(name = “beanid”)进行匹配,匹配不上直接报错。

2.8.注解开发

使用注解开发,首先得开启注解驱动,以及扫描包中的注解

<context:annotation-config/>
<!--    扫描这个包下所有的注解-->
    <context:component-scan base-package="com.yy"/>

在这里插入图片描述

在使用中@Component就如之前的bean,@value就如之前的property

在这里插入图片描述

为了适应分层架构,我们通过@Component衍生出其他的注解

@component:等同于注册bean(用在pojo类)

@Repository:等同于@component(用在dao层)

@serverice:等同于@component(用在service层)

@Controller:等同于@component(用在controller层)

@value:等同于注入值

@scope:等同于作用域

在我们平时的使用中,我们一般情况下使用配置文件配置bean,用注解对其进行赋值。

2.9.用Java进行配置

在spring4之后就直接可以用java文件来配置ApplicationContext.xml文件了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

//标志这个类为配置类
@Configuration
//扫描这个包下的所有注解
@ComponentScan("com.yy")
//引入其他的配置文件
@Import(yyconfig1.class)
public class yyconfig {

    @Bean
//    之前的配置bean,返回值为之前的class,类名为之前的ID
    public user getuser(){
//        返回对象就是要注入的对象
        return new user();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值