spring框架史上最全深入理解

spring框架:
1.spring是一个轻量级的控制反转和面向切面aop的容器框架
控制反转:ioc

spring框架史上最全深入理解

文章插图
 
核心容器:
1.应用上下文 context模块:
2.aop模块:
3.jdbc抽象和dao模块
4.对象关系映射集成模块
5.spring web模块
6.spring mvc框架
spring ioc控制反转和di依赖注入ioc:即控制反转 , 不是什么技术 , 而是一种设计思想 , 在JAVA开发中 , ioc意味着将你设计好的对象交给容器控制 , 而不是传统的在你的对象内部直接控制;在传统java se的程序设计 , 为们直接在对象内部通过new进行创建对象 , 是程序主动去创建依赖对象;而ioc是有专门的一个容器来创建这些对象 , 即由ioc容器来控制对象的创建;
反转:传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象 , 也就是正转;而反转则是由容器来帮助创建及注入依赖对象;因为由容器帮我们查找及注入依赖对象 , 对象只是被动的接受依赖对象 , 所以是反转;依赖对象的获取被反转了 。
ioc能做什么:
ioc不是一种技术 , 只是一种思想 。一个重要的面向对象编程的法则 , 它能指导我们如何设计出松耦合 , 更优良的程序 , 传统应用程序都是由我们在类内部主动创建依赖对象 , 从而导致类与类之间高耦合 , 难于测试;有了ioc容器后 , 吧创建和查找依赖对象的控制交给了容器;有容器进行诸如组合对象 , 所以对象与对象之间是松散耦合 , 这样也方便测试 , 利于功能复用 , 更重要的是使得程序的整个体系结构变得非常灵活 。
其实IoC对编程带来的最大改变不是从代码上 , 而是从思想上 , 发生了“主从换位”的变化 。应用程序原本是老大 , 要获取什么资源都是主动出击 , 但是在IoC/DI思想中 , 应用程序就变成被动的了 , 被动的等待IoC容器来创建并注入它所需要的资源了 。
IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们 , 我们找你”;即由IoC容器帮对象找相应的依赖对象并注入 , 而不是由对象主动去找 。
ioc和di:
di-dependency injection 即 ‘依赖注入’ 组件之间依赖关系由容器在运行期决定 , 形象的说 , 即由容器动态将某个依赖注入到组件之中 , 依赖注入的目的并非为软件系统带来更多功能 , 而是为提升组件重要的频率 , 并为系统搭建一个灵活 , 可扩展的平台 , 通过依赖注入机制 , 我们只需要通过简单的配置 , 而无需要任何代码就可指定目标需要的资源 , 完成自身的业务逻辑 , 而不需要关系具体的资源来自何处 , 由谁实现 。
“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”
spring bean工厂和工厂bean 分析bean工厂:不是bean , 在spring中一般指的是DefaultListableBeanFactory对象 , 管理和维护spring中所有的bean
工厂bean:一种特殊的bean , 在xml文件中配置的 , 用来生成新的bean的加工厂 , 通过getObject()方法可以获取其生产的新bean , 如果想获取该工厂bean本身 , 需要使用类似于getBean("&" + beanName)的样式 。
<bean name="studentFactory" class="com.demo.StudentFactoryBean" />Spring常用的三种注入方式1.构造方法注入:
2.setter注入:
3.基于注解的注入:
构造方法注入:
在spring的配置文件中注册UserService , 将UserDaoJdbc通过constructor-arg标签注入到UserService的某个有参数的构造方法<!-- 注册userService --><bean id="userService" class="com.lyu.spring.service.impl.UserService"> <constructor-arg ref="userDaoJdbc"></constructor-arg></bean><!-- 注册jdbc实现的dao --><bean id="userDaoJdbc" class="com.lyu.spring.dao.impl.UserDaoJdbc"></bean>通过name属性指定要注入的值 , 与构造方法参数列表参数的顺序无关 。<!-- 注册userService --><bean id="userService" class="com.lyu.spring.service.impl.UserService"> <constructor-arg name="userDao" ref="userDaoJdbc"></constructor-arg> <constructor-arg name="user" ref="user"></constructor-arg></bean><!-- 注册实体User类 , 用于测试 --><bean id="user" class="com.lyu.spring.entity.User"></bean><!-- 注册jdbc实现的dao --><bean id="userDaoJdbc" class="com.lyu.spring.dao.impl.UserDaoJdbc"></bean>


推荐阅读