Spring集成框架的主要功能是将控制权从调用的类转换到spring容器,由spring来实例化对象及依赖注入;
IOC :inversion of control 控制反转 DI:dependncy injection 依赖注入
控制反转,即控制权从调用的类转换到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"/>默认为单例 prototype:原型 => 每次创建一个新的实例; singleton:单例 => 一个bean的定义,只有一个实例; request:一次请求一个实例; session:一次会话一个实例; websocket:一次websocket连接一个实例;
在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("结束了...."); } }解耦和,类与类之间耦合度降低; 提高代码灵活性,可维护性
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,调用方法,将会看到通知执行了;
