空枝|大佬把Spring框架总结的「无比详细」,看完还说不懂别学了


空枝|大佬把Spring框架总结的「无比详细」,看完还说不懂别学了1、IOC和DIIOC: 控制反转即控制权的转移 , 将我们创建对象的方式反转了,以前对象的创建时由我们开发人员自己维护,包括依赖关系也是自己注入 。 使用了spring之后 , 对象的创建以及依赖关系可以由spring完成创建以及注入 , 反转控制就是反转了对象的创建方式 , 从我们自己创建反转给了程序创建(spring)
DI: Dependency Injection 依赖注入spring这个容器中 , 替你管理着一系列的类 , 前提是你需要将这些类交给spring容器进行管理 , 然后在你需要的时候 , 不是自己去定义 , 而是直接向spring容器索取 , 当spring容器知道你的需求之后 , 就会去它所管理的组件中进行查找 , 然后直接给你所需要的组件.实现IOC思想需要DI做支持注入方式: 1.set方式注入 2.构造方法注入 3.字段注入注入类型: 1.值类型注入 2.引用类型注入
好处:
1.降低组件之间的耦合度 , 实现软件各层之间的解耦.
2.可以使容器提供众多服务如事务管理消息服务处理等等 。 当我们使用容器管理事务时 , 开发人员就不需要手工 控制事务 , 也不需要处理复杂的事务传播
3.容器提供单例模式支持 , 开发人员不需要自己编写实现代码.
4.容器提供了AOP技术 , 利用它很容易实现如权限拦截 , 运行期监控等功能
5.容器提供众多的辅佐类 , 使这些类可以加快应用的开发.如jdbcTemplate HibernateTemplate
2.applicationContext 表示对拦截的方法进行放行//若注释proceedingJoinPoint.proceed()则不会执行被AOP匹配的方法proceedingJoinPoint.proceed();//环绕方法执行后 }AOP注解解析:
@Before 前置通知(Before advice) :在某连接点(JoinPoint)——核心代码(类或者方法)之前执行的通知 , 但这个通知不能阻止连接点前的执行 。 为啥不能阻止线程进入核心代码呢?因为@Before注解的方法入参不能传ProceedingJoinPoint , 而只能传入JoinPoint 。 要知道从aop走到核心代码就是通过调用ProceedingJionPoint的proceed()方法 。 而JoinPoint没有这个方法 。这里牵扯区别这两个类:Proceedingjoinpoint 继承了 JoinPoint。 是在JoinPoint的基础上暴露出 proceed 这个方法 。 proceed很重要 , 这个是aop代理链执行的方法 。 暴露出这个方法 , 就能支持 aop:around 这种切面(而其他的几种切面只需要用到JoinPoint , 这跟切面类型有关) ,能决定是否走代理链还是走自己拦截的其他逻辑 。 建议看一下 JdkDynamicAopProxy的invoke方法 , 了解一下代理链的执行原理 。 这样你就能明白 proceed方法的重要性 。
@After 后通知(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出) 。
@AfterReturning 返回后通知(After return advice) :在某连接点正常完成后执行的通知 , 不包括抛出异常的情况 。
@Around 环绕通知(Around advice) :包围一个连接点的通知 , 类似Web中Servlet规范中的Filter的doFilter方法 。 可以在方法的调用前后完成自定义的行为 , 也可以选择不执行 。 这是aop的最重要的 , 最常用的注解 。 用这个注解的方法入参传的是ProceedingJionPoint pjp , 可以决定当前线程能否进入核心方法中——通过调用pjp.proceed();
@AfterThrowing 抛出异常后通知(After throwing advice) : 在方法抛出异常退出时执行的通知 。
8、spring整合jdbcspring中提供了一个可以操作数据库的对象 , 对象封装了jdbc技术 ————JDBCTemplate JDBC模板对象 , 而JdbcDaoSupport则对JdbcTemplate进行了封装 , 所以要操作JdbcTemplate , 或只需要继承JdbcDaoSupport即可 。