SpringIOC和AOP基础

mac2026-04-01  6

Spring基础

文章目录Spring解决的主要问题IOC概念配置方式实例化的几种方式依赖注入的几种方式Bean的生命周期,作用域生命周期作用域 IOC的优势 AOP概念应用场景配置方式

文章目录

Spring解决的主要问题

任何框架的出现的本质原因都是为了提升开发者的开发效率,也就是简化我们的代码,减少大量的重复而冗杂的工作。Spring这个大容器本质上的操作就是集成,就像是一个大卖场,只是提供了一个场地,大家需要的基础服务和功能这里都有(对AspectJ框架, 字节码操作,消息服务的支持,对事务,JDBC的封装,ORM框架,web开发的支持),并且还有卖场自己的一些特色服务(面向切面编程,控制反转 )。而Spring解决的主要的问题就是对象的初始化和实例化。就拿上一个例子来说,本来每个商家(类)自己开店卖东西需要注册营业执照(初始化,实例化),但是只要到了Spring这个大卖场,里面所有登记了的商户都已经后台统一注册好了(初始化),商家需要用的时候,签个名就给你(实例化),这样就省去了每个类不停的创建对象实例化的操作,交给了Spring来统一管理,降低了类与类之间的耦合性。

IOC

概念

创建对象,依赖注入(为属性填入实例)的控制权由调用的类转变为IOC容器

BeanFactory ( IOC容器的基本接口)ApplicationContext( 扩展的IOC容器)ClassPathXmlApplicationContext ( 基于xml配置的IOC容器的实现类)

配置方式

<bean id="userDao" class="Spring.dao.UserDaoImp"> <property name="dog" value="se"/> <property name="list"> <list> <value>s</value> </list> </property> <property name="dao"> <list> <ref bean="userDao"/> </list> </property> </bean>

实例化的几种方式

<!--默认构造器实例化--> <bean id="demo" class="Spring.factory.demo"/> <!--静态工厂方法实例化,用静态工厂方法创建一个connection作为springbean--> <!--某个类(JDBCUtils)的静态方法(getConnection),返回值作为bean--> <bean id="connection" factory-method="getConnection" class="com.woniuxy.spring.common.JDBCUtils"/> <!--工厂bean实例化--> <bean id="holidayFactory" class="com.woniuxy.spring.factory.HolidayFactory"/> <!--holidayBean--> <bean id="holiday" factory-bean="holidayFactory" factory-method="create"/> <!--FactoryBean接口实例化--> <bean id="car" class="com.woniuxy.spring.factory.CarFactory"/>

依赖注入的几种方式

setter注入:<property name="index" > 构造器注入:<constructor-argcon name="index">

Bean的生命周期,作用域

生命周期

1.在bean配置上写init-method和destroy-method属性 2.实现InitializingBean和DisposableBean及其方法

public class Cycle2 implements InitializingBean, DisposableBean { @Override public void afterPropertiesSet() throws Exception { System.out.println("开始...."); } @Override public void destroy() throws Exception { System.out.println("结束了...."); } }

作用域

prototype 原型 => 每次创建一个实例singleton 单例 => 一个bean的定义,只有一个实例,不是一个类只有一个实例request 一个请求一个实例session 一个会话一个实例websocket 一次websocket链接一个实例

IOC的优势

解耦合,类与类之间的耦合度降低;提升代码的灵活性,可维护性

AOP

概念

连接点 JoinPoint 需要加入功能的位置,方法切入点 PointCut 真正执行加入功能的连接点通知 Advice 需要实现的功能切面 Aspect Java语言中,将切入点和通知等组装在一起的代码单元目标对象 Target 要操作的对象织入 Weave 将功能加入到切入点中的过程

应用场景

公共的,在很多的地方都会出现的系统功能:例如打印日志、性能监控、事务管理、安全验证等

配置方式

<?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="userService" class="com.woniuxy.spring.aop.service.impl.UserServiceImpl"/> <!--通知: 实现了打日志的功能--> <bean id="beforeExecution" class="com.woniuxy.spring.aop.component.BeforeExecution"/> <!--切入点:选出了需要增加功能的方法--> <bean id="pointCut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"> <property name="pattern" value="com.woniuxy.spring.aop.service.impl.UserServiceImpl.addUser"/> </bean> <!--切面:连接切入点和通知,让打日志功能在切入点的位置执行--> <bean id="aspect" class="org.springframework.aop.support.DefaultPointcutAdvisor"> <property name="pointcut" ref="pointCut"/> <property name="advice" ref="beforeExecution"/> </bean> <!--包装userService--> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
最新回复(0)