spring基础知识(二)

spring工程特性

工厂创建之后,会将Spring配置文件中的所有对象都创建完成(饿汉式)。
提高程序运行效率。避免多次IO,减少对象创建时间。(概念接近连接池,一次性创建好,使用时直接获取)。

生命周期方法

  • 自定义初始化方法:添加“init-method”属性,Spring则会在创建对象之后,调用此方法。
  • 自定义销毁方法:添加“destroy-method”属性,Spring则会在销毁对象之前,调用此方法。
  • 销毁:工厂的close()方法被调用之后,Spring会毁掉所有已创建的单例对象。
  • 分类:Singleton对象由Spring容器销毁、Prototype对象由JVM销毁。

生命周期阶段

单例bean:singleton

随工厂启动创建 ==》 构造方法 ==》 set方法(注入值) ==》 init(初始化) ==》 构建完成 ==》随工厂关闭销毁

多例bean:prototype

被使用时创建 ==》 构造方法 ==》 set方法(注入值) ==》 init(初始化) ==》 构建完成 ==》 JVM垃圾回收销毁

代理设计模式

将核心功能 和 辅助功能分离

为什么要有辅助类?
1.添加的代码不能重用,代码冗余
2.添加日志等代码会使代码不纯粹,即代码入侵

静态代理设计模式

通过代理类对象,为原始类对象添加辅助功能, 通常是一个业务就有一个代理类.
代理类:实现原始类的相同接口+添加辅助功能+调用原始类业务方法.

从Servlet---->ServletImpl
到Servlet---->代理类---->ServletImpl
通过代理类反射创建对象

动态代理设计模式

JDK动态代理(基于接口)

jdk动态代理

CGlib动态代理(基于继承)

CGlib动态代理

面向切面编程AOP

概念

  1. 连接点 joinpoint
    程序中客观存在的方法
  2. 切入点 pointcut
    需要添加辅助功能的方法
  3. 通知(增强)advice
    辅助功能
  4. 切面 aspect
    通知与切入点的关系(那个切入点上执行那个功能)

在配置文件中:

<!--原始对象-->
<bean id="us" class="com.xx.UserServiceImpl" />

<!--辅助对象-->
<bean id="myAdvice" class="com.xx.MyAdvice" />
<aop:config>
    <!--切点-->
    <aop:pointcut id="myPointCut" expression="execution(* save())" />
</aop:config>
<aop:config>
    <!--组装切面 -->
    <aop:advisor advice-ref="myAdvice" pointcut-ref="myPointCut" />
</aop:config>

特点

  • 通过AOP提供的编码流程,更便利的定制切面,更方便的定制了动态代理。
  • 进而彻底解决了辅助功能冗余的问题;
  • 业务类中职责单一性得到更好保障;
  • 辅助功能也有很好的复用性。

通知类

前置通知:MethodBeforeAdvice
后置通知:AfterAdvice //有异常执行
返回通知:AfterReturningAdvice //有异常不执行,方法会因异常而结束,无返回值
异常通知:ThrowsAdvice
环绕通知:MethodInterceptor

切面类Aspect类

before 前置通知
after 后置通知
after-returing 返回通知
after-throwing 异常通知
around 环绕通知

注解版本

<!--开启AOP注解:-->
<aop:aspectj-autoproxy />
@Pointcut("execution(* com.qianfeng.service.UserService.add())")
public void m1(){}
@Before("m1()")
@After("m2()")
@AfterReturning("m3()")
@AfterThrowing("m4()")
@Around("m5()")
public void around(ProceedingJoinPoint pjd){
        System.out.println("环绕通知前置执行");
        try {
            pjd.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println("环绕通知后置执行");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Spring是一个广泛使用的轻量级开源框架,用于构建企业级Web应用程序。Spring框架提供了模块化的解决方案,简化了企业级应用的开发、管理以及依赖注入(Dependency Injection,DI)等功能。以下是一些Spring基础知识点的整理: 1. **IoC(Inversion of Control)和DI(Dependency Injection)**:Spring的核心思想就是IoC,它反转了传统的控制流动,使对象之间通过容器管理彼此的依赖关系,而不是硬编码。DI是IoC的一种具体实现方式,通过配置文件或注解自动为对象提供所需依赖。 2. **Bean的作用域和生命周期**:Spring中的Bean有多种作用域,如Singleton(单例)、Prototype(原型)、Request、Session等。每个Bean都有其生命周期,从创建、初始化到使用和销毁。 3. **Spring配置文件**:通常使用XML配置文件(如applicationContext.xml)或Java配置(@Configuration classes)来定义Spring应用的组件和依赖关系。 4. **AOP(Aspect Oriented Programming)**:Spring AOP支持面向切面编程,可以编写跨组件的行为,比如日志记录、事务管理等。 5. **Spring MVC**:Spring提供的web MVC架构,包括Controller处理HTTP请求,Model负责数据访问和业务逻辑,View负责渲染结果给用户。 6. **Spring Boot**:Spring Boot简化了Spring应用的初始搭建,自动配置了许多常用的功能,使得快速开发变得更容易。 7. **Spring Data**:提供了一套高级API,用于简化数据访问操作,如JPA、MongoDB等。 8. **Spring Security**:用于实现Web应用的安全管理,包括认证、授权、会话管理等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值