Spring学习笔记8.11

Spring主干内容


在这里插入图片描述

IOC

在这里插入图片描述
在这里插入图片描述
IoC实现方法:
在这里插入图片描述
工厂模式: 工厂生产某个类,解耦合。
在这里插入图片描述
IOC底层原理:xml解析、工厂模式、反射

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
FileSystem文件路径,ClassPath类路径
在这里插入图片描述
2.Bean管理操作两种方式:

  • 1.配置xml文件方式

    • 创建对象:
      <bean id=“user” class=“com.guigu.User”></bean>
      id标识(或者用name,它可以加特殊符号);class路径
      创建对象的时候,默认无参构造。

    • 注入属性://DI: 依赖注入(注入属性)
      1.用set方法注入(xml中编辑)
      在这里插入图片描述
      2.或者有参构造方法注入
      在这里插入图片描述
      或者(不常用):
      在这里插入图片描述
      内容中如果存在特殊符号:
      在这里插入图片描述
      3.外部bean注入(对象属性)
      在这里插入图片描述
      4.属性注入(内部bean)
      在这里插入图片描述
      5.级联赋值(就是外部new一个bean+给它赋值)(或者用a.b=” “也可)

  • 注入集合、数组:
    在这里插入图片描述

普通bean(定义类型和返回类型相同)和工厂bean(实现FactoryBean接口,定义类型和返回类型可以不同)。

bean的作用域:就是设置单实例(每次获取到的对象相同)还是多实例,默认单实例。(通过输出地址可以进行区分)设置scope属性,singleton(默认)和prototyoe。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第三步前后都可以加后置处理器(实现BeanPostProcessor)
在这里插入图片描述

  • 自动装配:bean 中有autowire属性:byName或者byType

外部属性文件注入:
在这里插入图片描述

在这里插入图片描述

  • 2.注解方式
    2.1什么是注解
    在这里插入图片描述
    Spring中针对Bean提供的注解:
    (1)@Component
    (2)@Service
    (3)@Controller
    (4)@Repository
  • 四个注解功能一样,创建bean实例。

注: 要注入aop依赖

  • 开启组件扫描:
    在这里插入图片描述
    还可以设置扫描范围:
    在这里插入图片描述
    哪些不扫描:
    加粗样式
    Spring注入属性所用到的注解:
    (1)@Autowired:根据属性类型注入
    (2)@Qalifier:根据属性名称注入
    (3)@Resource:都可以
    (4)@Value:普通类型注入
  • 完全注解开发(xml换成配置类)
    变化:
    xml扫描换成配置类:
    在这里插入图片描述
    测试方式略有不同:
    在这里插入图片描述

AOP

1.概念
在这里插入图片描述
AOP底层:

  • 1.动态代理:
    有接口情况:JDK动态代理
    在这里插入图片描述

    无接口情况:CGLIB动态代理
    在这里插入图片描述
    java.lang.Proxy代理类
    在这里插入图片描述
    在这里插入图片描述

  • AOP术语:

  • (1)连接点:类里面可以被增强的方法

  • (2)切入点:实际被增强的方法

  • (3)通知(增强):实际增强的逻辑部分成为通知(增强)

    • 前置通知:在方法前置性(Before)
    • 后置通知:在方法后执行(AfterReturning)
    • 环绕通知:前后都有(Around)
    • 异常通知:方法出现异常会执行(AfterThrowing)
    • 最终通知:类似finally(After)
  • (4)切面:把通知应用到切入点的过程
    切入点表达式(对哪个类的哪个方法进行增强):在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.基于AspectJ (不是spring框架,独立AOP框架) 完成AOP操作:
(1)基于xml文件
在这里插入图片描述

(2)基于注解方式

  • 用到的xml内存空间:context和aop。
    *在这里插入图片描述
    (4)<aop: aspectj-autoproxy></aop: aspectj-autoproxy>(扫描@aspect注解)
    在这里插入图片描述
    在这里插入图片描述
@Aspect
@Component
public class ProxyClass {

	//前置
    @Before(value = "execution(* com.guigu.spring.aop.NewUser.sum(..))")
    public void before(){
        System.out.println("before....");
    }
    
	//后置
    @AfterReturning(value = "execution(* com.guigu.spring.aop.NewUser.sum(..))")
    public void afterRturning(){
        System.out.println("afterRturning....");
    }
	
	//最终
    @After(value = "execution(* com.guigu.spring.aop.NewUser.sum(..))")
    public void after(){
        System.out.println("after....");
    }

	//异常
    @AfterThrowing(value = "execution(* com.guigu.spring.aop.NewUser.sum(..))")
    public void afterThrowing(){
        System.out.println("afterThrowing....");
    }

	//环绕
    @Around(value = "execution(* com.guigu.spring.aop.NewUser.sum(..))")
    public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("around before....");
        proceedingJoinPoint.proceed();
        System.out.println("around latter....");
    }

}

5.相同切入点抽取
在这里插入图片描述
用的时候直接写方法名称。
6.多个增强类增强同一个方法(设置优先级):
@Order(数字)越小优先级越高

小补充:也可以完全基于注解开发
在这里插入图片描述
替换为:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值