solitaryclown

Spring

2022-02-12
solitaryclown

#

1. 介绍

Spring是一个分层的JavaSE/EE应用的full-stack轻量级开源框架,以IOC(Inverse Of Control)和AOP(Aspect Oriented Programming)为核心,大大降低企业级应用开发的复杂性。

Spring体系结构:
Spring框架体系结构

2. web环境集成Spring

web集成spring需要在web.xml中配置spring提供的监听器类ContextLoaderListener,启动参数分为spring配置文件和配置类(使用@Configuration的类)两种:

  1. 使用spring xml配置文件 spring监听器默认是加载xml文件,所以只需要配置xml文件路径
    <context-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:applicationContext.xml</param-value>
     </context-param>
    
  2. 使用配置类
     <?xml version="1.0" encoding="UTF-8"?>
     <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    
    
         <!--Spring监听器,使用注解方式启动-->
         <!--使用注解上下文环境类-->
         <context-param>
             <param-name>contextClass</param-name>
             <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
         </context-param>
         <!--配置类位置-->
         <context-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>com.huangbei.config.SpringConfiguration</param-value>
         </context-param>
    
         <!--spring的web监听器-->
         <listener>
             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
         </listener>
    
     </web-app>
    

3. 应用

3.1. IOC

Spring 核心框架最重要的部分之一是 Spring IoC 容器。Spring IoC Container 主要负责实现控制反转控制(IoC) ,即通过创建对象并在运行时动态注入它们来实现类之间的松散耦合。
Spring IoC Containers 帮助实例化类和创建对象、配置对象、组装和管理对象之间的依赖关系。创建、配置和组装对象所需的信息是通过读取 XML 配置文件或扫描项目中使用的 Spring Java annotation 获得的。

IOC的核心原理是反射。

3.1.1. 依赖和配置

  1. 引入依赖spring-context
  2. 创建Spring bean配置文件,假设为bean.xml
  3. 在bean.xml中添加bean标签,属性为类的相关信息,比如id、全限定名、单例/多例、属性配置(实现依赖注入)等。
3.1.1.1. bean实例化的3种方式
  1. 无参构造方法实例化对象
  2. 自定义工厂类静态方法返回实例化对象
  3. 自定义工厂类实例方法返回实例化对象

3.2. AOP

Aspect-Oriented Programming,面向切面编程。

本质:在不修改方法源码的前提下,对方法原有的功能进行增强(扩展)。 作用:对于多个方法需要相同的功能扩展,使用AOP,提高代码的可重用性、可扩展性和可维护性等,降低系统的耦合性。

AOP的原理是动态代理,它的实现方式有两种:JDK提供的的动态代理和cglib提供的动态代理。

3.2.1. 使用

3.2.1.1. 基于XML
<!--织入配置-->
<aop:config>
    <aop:pointcut id="p2" expression="execution(public boolean com.huangbei.aop.TargetServiceImpl.delete())"/>
    <aop:pointcut id="p1" expression="execution(public void com.huangbei.aop.TargetServiceImpl.add())"/>
    <aop:aspect ref="myAspect">
        <aop:before method="m1" pointcut-ref="p1"/>
        <aop:after method="m2" pointcut-ref="p1"/>
        <aop:around method="m3" pointcut-ref="p2"/>
    </aop:aspect>
</aop:config>
3.2.1.2. 基于Annotation
<context:component-scan base-package="com.huangbei.aop.anno"/>
<!-- 开启自动代理 -->
    <aop:aspectj-autoproxy />

上一篇 Java Web

下一篇 SpringMVC

Comments

Content