spring框架 --入坑指南

SpringIOC

案例讲解

先看示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原先的控制权在程序员手中(可以一直new直接创建)
但是现在可以将控制权,直接给到用户手中 ⇒ 耦合性大大降低!

阅读一下

建议先阅读一下

容器:Spring 是一个容器,因为它包含并且管理应用对象的生命周期
控制反转:IOC (Inversion of Control),指的是将对象的创建权交给 Spring 去创建

使用 Spring 之前,对象的创建都是由我们自己在代码中 new 创建。而使用 Spring之后。对象的创建都是由给了 Spring 框架。

IOC (Inversion of Control) 是指在程序开发中,对象实例的创建不再由调用者管理,而是由 Spring 容器创建。Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 Spring 容器中,控制权发生了反转,这就是 Spring 的 IOC 思想。

IOC容器的概念:IOC 容器就是具有依赖注入功能的容器,IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中 new 相关的对象,应用程序由 IOC 容器进行组装。在 Spring 中 BeanFactory 是 IOC 容器的实际代表者。

Bean的概念:在 Spring 中,被 Spring 容器所管理的对象称之为”Bean”对象。一个 Spring 的 Bean 对象可以是任何形式的 POJO

依赖注入:DI (Dependency Injection),是指依赖的对象不需要手动调用 setXX 方法去设置,而是通过配置赋值

helloSpring

无参构造

这玩意 是造轮子用的 ⇒ 是靠 set方法 进行注入(可以吧实体类的 set 注释一下,看看结果)
案例如下(跟着敲一下就所有感受):

pojo:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;

    public void test(){
        System.out.println("我的名字是:"+getName());
    }
}

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="User" class="www.pojo.User">
        <property name="name" value="HelloSpring" />
    </bean>
</beans>

test:

public class Test1 {


    @Test
    public void test(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");

        User user = (User) applicationContext.getBean("User");

        user.test();
    }
}

在这里插入图片描述

或者用这个方法不需要 强转

在这里插入图片描述

IOC创建对象的三种方式(一共有三种,但是按照类型创建不推荐。略过。)

如果按照类型创建的话,有两个String类型,那就玩完。还是略过为好。

在这里插入图片描述

在这里插入图片描述

按照类型创建 ⇒ 略!
按照下标创建

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

按照名称创建(重点掌握就足以)

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

只要创建了 bean,就会被实例化,哪怕创建了,不用,都会自己 new 出来。

起别名

在这里插入图片描述

import导入

在这里插入图片描述

依赖注入

构造器注入(前面已解释,此处略)
set方式注入(重点)
  • 依赖注入:set注入
    • 依赖:bean 对象的创建依赖于容器
    • 注入: bean 对象中的所有属性,由容器注入!

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

P命名和C命名注入

在这里插入图片描述

注意点:P命名和C命名 不能直接使用,如果想使用的话,请加入约束。

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

bean 的作用域

  1. 单例模式(spring 的默认模式)
  2. 原型模式: 每次从容器中 get 的时候,都会产生一个新的对象!

在这里插入图片描述

Bean的自动装配

  • 自动装配 是 spring 满足 bean 依赖一种方式!
  • spring 会在上下文中自动寻找,并自动给bean装配属性。

在spring中有三种装配的方式

  1. 在 xml 中显示的配置
  2. 在 java 中显示的配置
  3. 隐式的自动装配 bean(重点)

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

注解实现自动配置(重点)

要使用注解须知

  • 导入约束
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ab6b0faa2a15400989500faf5a8e21d1.png)
  • 配置注解的支持

<context:annotation-config />
在这里插入图片描述

  • 使用注解@Autowired ⇒ 默认是 ByName 模式
    我们使用后,可以省去 set 方法,但前提是自动装配的属性,在 IOC 容器中存在,且符合名称(byName)。
  • @Qualifier(@Value="xxx") ⇒ 先通过byType,后使用byName,如果都找不到则报错。 此注解可以指定唯一的注解。
    等同于@Resource(name="xxx") ⇒ 先通过 byName去找,如果找不到的情况下,则会通过byType,如果两个都找不到,则报错。

使用注解开发

spring 4.0 以后,使用一些注解 要导入 aop.jar 包。别忘记哦~~ 。

<context:annotation-config /> ⇒ 注解驱动
<context:component-scan base-package="www.Pojo" /> ⇒ 扫描下包的注解

@Component ⇒ 等价于 组件一个 bean,这样就可以不在xml中,组件bean了。名字就是默认类的小写。
@Value ⇒ 可以给属性注入值

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

使用@Service 正常,但@Resource 报错问题解决(原因记录如下)

总体废话一下,有耐心看完下面的,没耐心可以略过哦~
我想说的是,一般@Resource用于值代入,但是@Service一般用于创建bean
对不起大家,我是小白,这是我个人的理解,还望有大神在评论能帮我分析一下

@Service注解

@Service注解是Spring框架中用于标识业务逻辑层的组件的注解。它告诉Spring框架,被标记的类是一个业务逻辑组件,需要将其纳入Spring的上下文中进行管理。当应用程序启动时,Spring会自动扫描带有@Service注解的类,并将其作为Bean实例化,然后将其添加到Spring的上下文中。

@Service注解通常用于业务逻辑层的实现类上,它不仅可以用于类级别的注解,还可以用于方法级别的注解。当用于方法级别时,它表示该方法是一个业务逻辑方法,可以与其他组件进行协作。

在使用@Service注解时,需要注意它的作用范围。默认情况下,@Service注解的作用范围是单例的,即在整个应用程序中只有一个实例。如果需要创建多个实例,可以通过设置@Scope注解的值为prototype来实现。

@Resource注解(一般用在属性之中)

@Resource注解是Java EE规范中定义的注解,用于实现依赖注入。它告诉Spring框架,被标记的字段或方法需要注入一个依赖项。Spring会根据字段或方法的类型和名称,在上下文中查找匹配的Bean,并将其注入到被标记的字段或方法中。

@Resource注解可以应用于字段、setter方法和配置方法上。当应用于字段时,Spring会自动将匹配的Bean注入到该字段中。当应用于setter方法时,Spring会调用该方法并将匹配的Bean作为参数传递给它。当应用于配置方法时,Spring会将匹配的Bean作为该方法的返回值。

@Resource注解具有更广泛的应用范围,它不仅仅限于Spring框架,还可以在其他的Java EE规范中使用。另外,@Resource注解还可以通过name和type属性来指定注入的Bean的名称和类型。

衍生的注解

Component ⇒ 装配某个 bean。以下相同。
Dao ⇒ @Repository
Service ⇒ @Service
controller ⇒ @Controller

功能都是一样的,都是代表将某个类,注册到 spring 容器中,装配。

使用 JavaConfig 来实现配置

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

代理模式

为什么要学习代理模式?因为这就是SpringAOP的底层!
代理模式的分类:

  • 静态代理
  • 动态代理
静态代理

角色分析:

  • 抽象角色:一般会使用接口或者抽象类来解决
  • 真实角色:被代理的角色
  • 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作
  • 客户:访问代理对象的人
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值