Spring基础

mac2026-03-31  5

Spring集成框架的主要功能是将控制权从调用的类转换到spring容器,由spring来实例化对象及依赖注入;

核心理念

IOC :inversion of control 控制反转 DI:dependncy injection 依赖注入

IOC

概念

控制反转,即控制权从调用的类转换到spring容器,由spring来实例化对象及依赖注入。

配置方式 XML文件配置 在配置文件中直接使用bean标签来实例化对象,value注入基本类型,ref注入已有的bean; 注解扫描配置 注解: 注册springBean:@Controller,@Service,@Repository,@Component; 自动依赖注入:@Autowired,@value; 生命周期:@PostConstruct,@PreDestroy; 作用域范围:@Scope XML配置 指定扫描的范围,包括递归的所有的包和子类< context:component-scan base-package="..."/> Java文件配置 使用Java类代替XML作为配置文件 @Configuration:标记一个类为配置类; @Bean:标记某个方法返回值为spring的bean,方法参数为依赖注入的请求; @ComponentScan:打开扫描功能; @PropertySource(“配置文件位置”):导入peoperties文件;

实例化方式

默认构造器实例化

< bean id="..." class="..." />

静态工厂方法实例化 调用某个类的静态方法,返回值作为bean

< !- -用静态工厂方法创建一个connection作为springbean- -> < bean id="connection" factory-method="getConnection" class="com.test.spring.common.JDBCUtils"/>

工厂bean实例化

<! - -工厂bean - -> < bean id="holidayFactory" class="com.test.spring.factory.HolidayFactory"/> < !- -holidayBean - -> < bean id="holiday" factory-bean="holidayFactory" factory-method="createHoliday" />

利用FactoryBean接口实例化 一个类实现FactoryBean接口,实现其方法; 配置之后,bean的实例为FactoryBean#getObject方法的返回值;

public class CarFactory implements FactoryBean< Car> { @Override public Car getObject() throws Exception { return new Car(); } @Override public Class<?> getObjectType() { return Car.class; } } < bean id="car" class="com.test.spring.factory.CarFactory"/>

依赖注入的几种方式

setter注入 利用setter方法进行依赖注入构造器注入<constructor-arg name=".." value="...">

bean的作用域

默认为单例 prototype:原型 => 每次创建一个新的实例; singleton:单例 => 一个bean的定义,只有一个实例; request:一次请求一个实例; session:一次会话一个实例; websocket:一次websocket连接一个实例;

bean的生命周期

在bean配置上写init-method和destroy-method; 实现initializingBean和DisposableBean接口; 容器关闭时销毁;

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

IOC优势

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

AOP

Aspect Oritented Programming 面向切面编程 具有横切性质的系统功能,如日志记录,性能统计等。散布在各个类中。需要一种机制将这类功能加入到需要的位置中去,这种机制就叫做AOP;

相关名词

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

步骤

1)编写service类; 2)编写通知,实现MethodBeforeAdvice接口; //method 要执行的方法 // objects 方法的参数 // o 方法所在的对象 3)配置XML 配置service; 配置通知; 配置切入点:class= org.springframework.aop.support.JdkRegexpMethodPointcut ,配置属性pattern=> service的方法 配置切面:class=org.springframework.aop.support.DefaultPointcutAdvisor 连接切入点和通知 包装service类:class=org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator 获取bean,调用方法,将会看到通知执行了;

最新回复(0)