- 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory【使用IOC控制反转】,它是工厂模式的实现。
- Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。
- Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。
- Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。
- Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。
- Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。
- Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。
IOC(Inversion of Control)控制反转:
- 所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。
- IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通DI(Dependency Injection,依赖注入)来实现的。
谁控制谁?为什么叫反转? ------ IoC容器控制,而以前是应用程序控制
控制什么? ------ 控制应用程序所需要的资源(对象、文件……)
为什么控制? ------ 解耦组件之间的关系
控制的哪些方面被反转了? ------ 程序的控制权发生了反转:从应用程序转移到了IoC容器。
IoC容器特点
【1】无需主动new对象;而是描述对象应该如何被创建即可
IoC容器帮你创建,即被动实例化;
【2】不需要主动装配对象之间的依赖关系,而是描述需要哪个服务(组件),
IoC容器会帮你装配(即负责将它们关联在一起),被动接受装配;
【3】主动变被动,好莱坞法则:别打电话给我们,我们会打给你;
【4】迪米特法则(最少知识原则):不知道依赖的具体实现,只知道需要提供某类服务的对象(面向抽象编程),松散耦合,一个对象应当对其他对象有尽可能少的了解,不和陌生人(实现)说话
【5】IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则。
DI:依赖注入(Dependency Injection):
用一个单独的对象(装配器)来装配对象之间的依赖关系 。
谁依赖于谁? ------- 应用程序依赖于IoC容器
为什么需要依赖? ------- 应用程序依赖于IoC容器装配类之间的关系
依赖什么东西? ------- 依赖了IoC容器的装配功能
谁注入于谁? ------- IoC容器注入应用程序
注入什么东西? ------- 注入应用程序需要的资源(类之间的关系)
依赖注入有3种方式
1.接口注入:在接口中定义要注入的信息,并通过接口来完成注入。
2.setter注入
3.构造函数注入
constructor1.jpg constructor2.jpg constructor3.jpg constructor4.jpg注解Annotation:
<!-- 打开Spring的Annotation支持 -->
<context:annotation-config/>
<!-- 设定Spring 去哪些包中找Annotation -->
<context:component-scan base-package="org.zttc.itat.spring"/>
//等于完成了<bean id="userDao" class="org.zttc.itat.spring.UserDao"/>
//@Component("userDao")//公共的创建bean的Annotation
@Repository("userDao") //@Repository一般用于DAO的注入
public class UserDao implements IUserDao {
//@Component("userService")
@Service("userService") //业务层一般使用@Service
public class UserService implements IUserService {
//@Component("userAction")
@Controller("userAction") //MVC的控制层一般使用@Controller
@Scope("prototype")
public class UserAction {
@controller 控制器(注入服务)
@service 服务(注入dao)
@repository dao(实现dao访问)
@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)
@Autowired注解:
@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
@Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false
@Resource注解:
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按byName自动注入罢了。
@Resource与@Autowired使用区别:
@Resource(name="loginService")
private LoginService loginService;
@Autowired(required=false)
@Qualifier("loginService")
private LoginService loginService;
网友评论