spring入门

2021/6/5 18:24:24

本文主要是介绍spring入门,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Spring入门

目录
  • Spring入门
    • 1、IOC容器
    • 2、依赖注入DI
    • 3、Bean 自动装配
    • 4、Spring 注解配置
    • 5、AOP面向切面编程

1、IOC容器

  • 什么是IOC?形象的了解spring-ioc 移步知乎

  • Spring 提供了以下两种不同类型的容器

    • Spring BeanFactory 容器
    • Spring ApplicationContext 容器

    这两个容器有什么区别?

    ApplicationContext 容器包括 BeanFactory 容器的所有功能,所以通常不建议使用BeanFactory。BeanFactory 仍然可以用于轻量级的应用程序,如移动设备或基于 applet 的应用程序,其中它的数据量和速度是显著。

  • Bean

    • 什么是bean

      被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的。

    • 如何创建bean

    • xml

      • java class
      • 注解

2、依赖注入DI

  • 基于构造函数的注入

    当容器调用带有一组参数的类构造函数时,基于构造函数的 DI 就完成了,其中每个参数代表一个对其他类的依赖。

  • 基于设值函数的注入

    当容器调用一个无参的构造函数或一个无参的静态 factory 方法来初始化你的 bean 后,通过容器在你的 bean 上调用设值函数,基于设值函数的 DI 就完成了。

  • 注入内部Bean

    元素中的元素称为内部bean

  • 注入集合

3、Bean 自动装配

  • byName
  • byType
  • constructor
  • autodetect
名称 说明
byName 根据 Property 的 name 自动装配,如果一个 Bean 的 name 和另一个 Bean 中的 Property 的 name 相同,则自动装配这个 Bean 到 Property 中。
byType 根据 Property 的数据类型(Type)自动装配,如果一个 Bean 的数据类型兼容另一个 Bean 中 Property 的数据类型,则自动装配。
constructor 根据构造方法的参数的数据类型,进行 byType 模式的自动装配。
autodetect 如果发现默认的构造方法,则用 constructor 模式,否则用 byType 模式。
no 默认情况下,不使用自动装配,Bean 依赖必须通过 ref 元素定义。

4、Spring 注解配置

  • @Required

    public class Student {
        private String name;
        private Integer age;
    
        public String getName() {
            return name;
        }
        @Required
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
        @Required
        public void setAge(Integer age) {
            this.age = age;
        }
    }
    
    
    
    
    <bean id="student" class="com.example.w3cschool.pojo.Student">
        <property name="name" value="mh"/>
        <property name="age" value="11"/>
    </bean>
    
  • @Autowired

    可能会有这样一种情况,当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混

  • @ComponentScan扫描器
  • @Configuration表明该类是配置类
  • @Component 指定把一个对象加入IOC容器--->@Name也可以实现相同的效果【一般少用】
  • @Repository 作用同@Component; 在持久层dao使用
  • @Service 作用同@Component; 在业务逻辑层service使用
  • @Controller 作用同@Component; 在控制层controller使用
  • @Resource 依赖关系
    • 如果@Resource不指定值,那么就根据类型来找,相同的类型在IOC容器中不能有两个
    • 如果@Resource指定了值,那么就根据名字来找

image-20210605164837764

5、AOP面向切面编程

https://www.cnblogs.com/hongwz/p/5764917.html

目前最流行的 AOP 框架有两个,分别为 Spring AOP 和 AspectJ。

AOP 的相关术语

名称 说明
Joinpoint(连接点) 指那些被拦截到的点,在 Spring 中,可以被动态代理拦截目标类的方法。
Pointcut(切入点) 指要对哪些 Joinpoint 进行拦截,即被拦截的连接点。
Advice(通知) 指拦截到 Joinpoint 之后要做的事情,即对切入点增强的内容。
Target(目标) 指代理的目标对象。
Weaving(植入) 指把增强代码应用到目标上,生成代理对象的过程。
Proxy(代理) 指生成的代理对象。
Aspect(切面) 切入点和通知的结合。

详细学习AOP之前先了解一下静态代理、动态代理

  • 静态代理:功能接口---接口实现类(厂家)---代理类(功能增强)---用户
  • 动态代理:在程序执行过程中,使用jdk的反射机制,创建代理类对象,并动态的指定要代理目标类。
    • (实现方式:JDK代理、CGLIB代理)

记得依赖注入

<!--AOP需要-->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.4</version>
</dependency>
<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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd">

注意几点:

  • aop:advisor,是有顺序的,必须放在aop:pointcut之后
    
    spring aop的两种写法aspect和advisor
    https://www.cnblogs.com/flying607/p/7833700.html
    
    
    

    Spring 通过XML配置文件以及通过注解形式来AOP 来实现前置,环绕,异常通知,返回后通知,后通知



这篇关于spring入门的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程