Spring注解,AOP等

文章探讨了为何在Java中,没有默认构造方法的类被继承时可能会出错,通常是因为缺少对父类构造方法的调用。同时,介绍了如何通过接口和实现类降低系统耦合度,以及Spring框架中的依赖注入(DI)概念,包括setter注入、构造器注入和注解注入。此外,还概述了AOP的基本概念和使用,如通知类型和切入点定义。
摘要由CSDN通过智能技术生成

1、为什么没有默认构造方法的类被继承时出错?

继承一个没有无参构造的类时,要创建相应的有参构造才可用。

默认构造方法:
默认构造方法是指在一个类中没有显式定义构造方法时,编译器会自动生成的构造方法。它没有任何参数,并且在创建对象时会执行一些默认的初始化操作。如果类中已经定义了任何构造方法(无论是默认构造方法还是带参数的构造方法),编译器将不会自动生成默认构造方法。

继承:
继承是面向对象编程中的一种机制,允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。子类继承了父类的特性,并且可以扩展或重写这些特性。

现在,如果一个类没有显式定义构造方法,而且其子类尝试继承它,一般情况下是不会出错的。这是因为编译器会在子类中隐式调用父类的默认构造方法,如果父类没有定义构造方法,编译器会提供一个默认的无参构造方法供子类使用。

然而,当出现以下情况时,可能会出现继承时的错误:

  1. 父类没有默认构造方法且没有显式提供其他构造方法:
    如果父类定义了带参数的构造方法,但没有定义默认构造方法,并且子类也没有显式调用其中一个父类的构造方法,则编译器会报错。因为子类在创建对象时需要调用父类的构造方法,而此时没有默认构造方法可供调用。

  2. 父类的构造方法不可见或无法访问:
    如果父类的构造方法是私有的或受保护的,子类将无法访问父类的构造方法,从而导致继承时出错。在这种情况下,可以考虑修改父类的构造方法的访问修饰符,或者在父类中提供一个公共的静态方法来获取实例。

  3. 父类构造方法抛出异常:
    如果父类的构造方法抛出异常,子类在实例化时也会因为异常而出错。在这种情况下,需要检查父类构造方法的实现,并确保它能够正确地初始化对象。

总结:默认构造方法的类被继承一般不会出错,除非父类没有默认构造方法且没有提供其他可用的构造方法,或者父类的构造方法不可见或抛出异常。在继承时,确保父类的构造方法能够正确地初始化对象,并根据需要适当调整访问修饰符和构造方法的参数。2、

2、如何解决耦合度高的问题

  1. 定义一个,在接口中定义方法
  2. 定义实现类,实现接口,实现功能代码在重写的方法内
  3. 使用功能:把实现功能类对象作为属性

Spring注解开发

开发步骤:

1.导包

2.创建配置类

3.写案例测试

3、IOC和DI

IOC和DI是讲的同一概念的不同角度描述,只是侧重点还有应用的位置不同

DI的三种常见注入方式为:setter注入、构造方法注入和基于注解的注入

基于注解注入
public class AController {
    @Autowired
    private DiService diService;
    public String test001() {
        return diService.test001("annotation");
    }
}
/*
@Resource :java的注解,默认以byName的方式去匹配与属性名相同的bean的id,如果没有找到就会以byType的方式查找,如果byType查找到多个的话,使用@Qualifier注解(spring注解)指定某个具体名称的bean。

@Autowired :spring注解,默认是以byType的方式去匹配类型相同的bean,可以结合@Qualifier 注解根据byName方式匹配。
*/
构造方法注入

IoC 容器使用构造方法注入被依赖的实例。基于构造器的 DI 通过调用带参数的构造方法实现,每个参数代表一个依赖。

setter注入

IoC 容器使用 setter 方法注入被依赖的实例。通过调用无参构造器或无参 static 工厂方法实例化 bean 后,调用该 bean 的 setter 方法,即可实现基于 setter 的 DI。

AOP入门案例

  1. 导入相关坐标
<dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.4</version>
</dependency>
  1. 制作连接点(原始操作,Dao接口与实现类)
  2. 制作共性功能(通知类与通知)
  3. 定义切入点
  4. 绑定切入点与通知关系(切面)

AOP核心概念

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

AOP相关注解概念

通知说明
before (前置通知)通知方法在目标方法调用之前执行
after (后置通知)通知方法在目标方法返回或异常后调用
after-returning (返回后通知)通知方法会在目标方法返回后调用
after-throwing (抛出异常通知)通知方法会在目标方法抛出异常后调用
around (环绕通知)通知方法会将目标方法封装起来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R8A61fyQ-1690189695629)(C:\Users\Administrator\Desktop\微信截图_20230724143915.png)]

类的定义:

  1. class文件
  2. java文件
  3. 类型 int i = 6;Car car=new Car();

对象的定义

变量

面向对象编程

特点:封装,继承,多态

封装:隐藏细节的操作

编程思想描述:

定义类:把程序整体分割成多个部分

定义方法:把实现功能代码写在方法内

调用方法:

​ 创建对象

​ 通过对象调用方法,执行代码,实现功能

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值