1、dependency injection
说起依赖注入DI,我们常想起的就是在bean的xml文件中使用设值注入和构造注入的方式来实现,然后这也叫IOC。构造器注入实现很简单就是constructor-arg标签,
设值注入如下
依赖注入也叫控制反转,主要的目的是解决我们程序中对象之间不仅要处理自身业务逻辑还需要耦合其他bean的实际情况,通过控制反转我们能够实现各个功能模块相对独立。这么看起来好像是挺好的,但是项目发展起来之后,就会遇到配置文件膨胀的情况,这时候自动装配就出现了
自动装配xml的配置
自动装配注解:@Autowired,@Resource,@Inject,@Qualifier,@Named
构造型注解包括:@Controller,@Components,@Service,@Repository和使用@Component标注的自定义注解
2、events
Spring的事件分为内置事件和自定义事件,其中四个是上下文初始化,开始、停止和结束所发布的事件,还有一个是RequestHandledEvent告诉所有 bean HTTP 请求已经被服务。
内置事件通过实现ApplicationListener可以被通知到
自定义事件需要发布者,事件,监听者。
3、validation
做入参校验
4、data binding
Spring MVC 将 ServletRequest 对象传递给 DataBinder。
将处理方法的入参对象传递给 DataBinder。
DataBinder 调用 ConversionService 组件进行数据类型转换、数据格式化等工作,并将 ServletRequest 对象中的消息填充到参数对象中。
调用 Validator 组件对已经绑定请求消息数据的参数对象进行数据合法性校验。
校验完成后会生成数据绑定结果 BindingResult 对象,Spring MVC 会将 BindingResult 对象中的内容赋给处理方法的相应参数。
5、AOP
基于XML
基于注解
@Aspect
public class Logging {
@Pointcut("execution(* com.tutorialspoint.*.*(..))")
private void selectAll(){}
@Before("selectAll()")
public void beforeAdvice(){
System.out.println("Going to setup student profile.");
}
@After("selectAll()")
public void afterAdvice(){
System.out.println("Student profile has been setup.");
}
@AfterReturning(pointcut = "selectAll()", returning="retVal")
public void afterReturningAdvice(Object retVal){
System.out.println("Returning:" + retVal.toString() );
}
@AfterThrowing(pointcut = "selectAll()", throwing = "ex")
public void AfterThrowingAdvice(IllegalArgumentException ex){
System.out.println("There has been an exception: " + ex.toString());
}
}