【2021Spring编程实战笔记】Spring开发分享~(下)

简介: 【2021Spring编程实战笔记】Spring开发分享~(下)

【2021Spring编程实战笔记】Spring开发分享~(上)+https://developer.aliyun.com/article/1621239

04、构造注入(用的不多,只做了解)

  • 将需要注入的对象声明为成员变量
package construct;
public class Car {
    private String brand;
    private String corp;
    private Double price;
    private int maxSpeed;
}
  • 利用构造函数,我写了两个:
package construct;
public class Car {
    public Car(String brand, String corp, Double price) {
        this.brand = brand;
        this.corp = corp;
        this.price = price;
    }
    public Car(String brand, String corp, int maxSpeed) {
        this.brand = brand;
        this.corp = corp;
        this.maxSpeed = maxSpeed;
    }
}
  • 工厂容器里边配置一下:
<?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">
    <bean id="car" class="construct.Car">
        <constructor-arg value="Audi" type="java.lang.String"/>
        <constructor-arg value="luntai" type="java.lang.String"/>
        <constructor-arg value="30" type="java.lang.Double"/>
    </bean>
    <bean id="car1" class="construct.Car">
        <constructor-arg value="Audi" type="java.lang.String"/>
        <constructor-arg value="luntai" type="java.lang.String"/>
        <constructor-arg value="300" type="int"/>
    </bean>
</beans>
  • 构造注入的测试
package construct;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class CarTest {
    public static void main(String[] args) {
        ApplicationContext Context = new ClassPathXmlApplicationContext("/init/init.xml");
        Car car = (Car) Context.getBean("car");
        System.out.println(car.toString());
    }
}
  • 执行:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aBfGmG1O-1604408298814)(https://cdn.jsdelivr.net/gh/JackieLing/mage1/img/20201028105124.png)]

05、自动注入(用的也不多)

package autodi;
public class BookDAOImpl implements BookDAO {
    private BookDAO bookDAO;
    @Override
    public void save() {
        System.out.println("BookDAO invoke~~~");
    }
}
<?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">
    <bean id="bookDAO" class="autodi.BookDAOImpl"/>
    <!--
        autowrite的作用:用来指定当前组件中依赖的组件的注入方式是什么
        注意:类中成员变量与工厂中bean的id一致则自动赋值,否则不注入
        byname:根据类中的成员变量名进行注入
        bytype:根据类中的成员变量类型进行注入
    -->
    <!--<bean id="bookService" class="autodi.BookServiceImpl" autowire="byName"/>-->
    <!--
        类中成员变量的类型与工厂中bean的类型一致则强行注入,否则不注入。
    -->
    <bean id="bookService" class="autodi.BookServiceImpl" autowire="byType"/>
</beans>

06、spring工厂的细节

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-583X3hlZ-1604408298815)(https://cdn.jsdelivr.net/gh/JackieLing/mage1/img/20201028204142.png)]

07、AOP面向切面编程

7.1、静态代理(proxy)

  • 给一幅图做一个简单介绍:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XhNOlhdV-1604408298821)(https://img.rruu.net/image/5f9a7bea0f104)]

7.2、动态代理

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TnV8QcCC-1604408298824)(https://img.rruu.net/image/5f9aa84aab174)]

7.3、面向切面编程AOP原理概念

7.4、AOP编程的编程步骤

7.4.1引入AOP编程相关的依赖

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
  </dependencies>

7.4.2开发项目额外功能通知

7.4.3配置切面spring.xml

7.5、aop编程之环绕通知

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EsEUfSke-1604408298833)(https://img.rruu.net/image/5f9faf6ab5d89)]

7.6、切入点表达式

  • 切到某个类,就会为这个类创建 动态代理对象
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QFkNJslW-1604408298835)(https://img.rruu.net/image/5fa0a90a1676a)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bf2nKyjC-1604408298836)(https://img.rruu.net/image/5fa0aaebe47a7)]

08、IOC和AOP的复习

09、spring创建复杂对象

除了我们之前学过的new简单对象,其实还有很多对象是不能new出来的,比如抽象类对象,我们需要用官方提供的方法来对它进行实例化,然后调用实现功能。

对于复杂对象,我们不能交给工厂处理,也不能new处理。那么该如何创建这些复杂对象呢?

10、spring整合mybatis思路分析

10.1、引入依赖

bj-1604408298837)]

08、IOC和AOP的复习

  • [外链图片转存中…(img-0gRvXlDK-1604408298839)]

[外链图片转存中…(img-A6sMkGOT-1604408298840)]

09、spring创建复杂对象

除了我们之前学过的new简单对象,其实还有很多对象是不能new出来的,比如抽象类对象,我们需要用官方提供的方法来对它进行实例化,然后调用实现功能。

对于复杂对象,我们不能交给工厂处理,也不能new处理。那么该如何创建这些复杂对象呢?

[外链图片转存中…(img-VsptG5pO-1604408298841)]

[外链图片转存中…(img-uZtdmRb6-1604408298842)]

[外链图片转存中…(img-eCJdi5fG-1604408298843)]

10、spring整合mybatis思路分析

10.1、引入依赖

目录
相关文章
|
3月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
2月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
3306 46
|
3月前
|
XML 安全 Java
使用 Spring 的 @Aspect 和 @Pointcut 注解简化面向方面的编程 (AOP)
面向方面编程(AOP)通过分离横切关注点,如日志、安全和事务,提升代码模块化与可维护性。Spring 提供了对 AOP 的强大支持,核心注解 `@Aspect` 和 `@Pointcut` 使得定义切面与切入点变得简洁直观。`@Aspect` 标记切面类,集中处理通用逻辑;`@Pointcut` 则通过表达式定义通知的应用位置,提高代码可读性与复用性。二者结合,使开发者能清晰划分业务逻辑与辅助功能,简化维护并提升系统灵活性。Spring AOP 借助代理机制实现运行时织入,与 Spring 容器无缝集成,支持依赖注入与声明式配置,是构建清晰、高内聚应用的理想选择。
421 0
|
4月前
|
Java API 开发者
Spring 控制反转与依赖注入:从玄学编程到科学管理
在传统开发中,手动`new`对象导致紧耦合、难以维护和测试。控制反转(IoC)将对象创建交给框架,实现解耦。Spring通过IOC容器自动管理对象生命周期,开发者只需声明依赖,无需关心创建细节。依赖注入(DI)是IoC的具体实现方式,支持构造器、Setter和字段注入。构造器注入推荐使用,保证依赖不可变且易于测试。对于多个同类型Bean,可用`@Qualifier`或`@Primary`解决冲突。此外,Spring还支持依赖查找(DL),开发者主动从容器获取Bean,适用于动态场景,但侵入性强。掌握IoC与DI,有助于构建灵活、可维护的Spring应用。
|
2月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
2月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
2月前
|
XML Java 数据格式
《深入理解Spring》:AOP面向切面编程深度解析
Spring AOP通过代理模式实现面向切面编程,将日志、事务等横切关注点与业务逻辑分离。支持注解、XML和编程式配置,提供五种通知类型及丰富切点表达式,助力构建高内聚、低耦合的可维护系统。
|
2月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。