1.1Spring组成
Spring框架主要由七大模块组成。
- 核心模块
Spring Core模块是Spring的核心容器,他实现了IoC模式,提供了Spring框架的基础功能。在模块中包含组重要的BeanFactory类是Spring的核心类,负责对JavaBean的配置与管理。Spring Core模块采用Factory模式实现了IoC容器即依赖注入。 - Context模块
Spring Context模块继承BeanFactory类。它还提供了框架式的bean的访问方式和很多企业级的功能,如JNDI访问、支持EJB、远程调用、集成模板框架、E-mail和定时任务调度等。 - AOP模块
Spring集成了所有AOP功能,通过事务管理可以使任意Spring管理的对象AOP化。 - DAO模块
DAO模块提供了JDBC的抽象层,简化了数据库厂商的异常错误。 - O/R映射模块
- Web模块
- MVC模块
Spring Web MVC模块建立在Spring核心功能之上,这使它能拥有Spring框架的所有特性。
1.2简单配置Spring
jar包名称 | 说明 |
---|---|
spring.jar | 整个Spring模块,包含表中所有的jar的功能 |
spring-core.jar | Spring的核心模块,包含IoC容器 |
spring-aop.jar | Spring的AOP模块 |
spring-context.jar | Spring的上下文,包含ApplicationContext容器 |
spring-dao.jar | Spring的DAO模块,包含对DAO与JDBC的支持 |
spring-orm.jar | Spring的ORM模块,支持Hibernate、JDO等ORM工具 |
spring-web.jar | Spring的Web模块,包含Web application context |
spring-webmvc.jar | Spring的MVC框架模块 |
Spring的配置结构如下图
1.3 ApplicationContext的应用
ApplicationContext容器不仅提供了BeanFactory的多有特性,同时也允许使用更多的声明方式来得到开发人员需要的功能。
- ClassPathXmlApplicationContext类
从当前类路径中检索配置文件并加载来创建容器,其语法格式如下:
//获取到容器,容器配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//从容器中获取指定id的对象
People p = (People) context.getBean("p1");//对象不是new出来的,是从容器中get出来的
- FileSystemXmlApplicationContext类
该类也是ApplicationContext接口的实现类,和1区别在于读取Spring配置文件的方式。它不再从类路径中获取配置文件,而是通过参数指定配置文件的位置,可以获取类路径之外的资源。
ApplicationContext context = new ClassPathXmlApplicationContext(String configLocation);
- WebApplicationContext类
WebApplicationContext是Spring的Web容器,有两种方法可以再Servlet中使用WebApplicationContext。第一种方法是在Servlet的web.xml文件中配置Spring的ContextLoaderListener监听器;第二种方法同样修改web.xml文件,在文件中添加Servlet,使用Spring的org.springframework.web.context.ContextLoaderServlet类。
2.1控制反转与依赖注入
IoC将创建实例的任务交给IoC容器,这样开发应用代码时只需要直接使用类的实例,这就是IoC控制反转,即“依赖注入”,它使程序组件或类之间尽量形成一种松耦合的结构。
依赖注入有三种实现类型,Spring支持后两种:
接口注入- Setter注入
- 构造器注入
2.2bean配置
想要在Spring IoC容器中获取一个bean,首先要在配置文件中的< beans>元素中配置一个子元素< bean>,Spring的控制反转机制会根据< bean>元素的具体配置来实例化这个bean实例。
<bean id="test" class="com.bean.Test">
其中,id属性为bean的名称,class属性为对应的类名,这样通过BeanFactory容器的getBean(“test”)方法就可以获取到该类的实例。
2.3Setter注入
首先创建用户的JavaBean,代码如下:
public class User{
private String name;//姓名
private Integer age;//年龄
private String sex; //性别
... //省略Setter()和Getter()方法
}
在Spring的配置文件ApplicationContext.xml中配置该JavaBean,代码如下:
<bean name="user" class="com.bean.User">
<property name="name">
<value>小强</value>
</property>
...
</bean>
2.4构造器注入
在用户JavaBean中创建构造方法,代码如下:
public class User{
private String name;//姓名
private Integer age;//年龄
private String sex; //性别
//构造方法
public User(String name,Integer age,String sex){
this.name = name;
this.age = age;
this.sex = sex;
}
}
在Spring的配置文件ApplicationContext.xml中通过< constructor-arg>元素为JavaBean的属性赋值,代码如下:
<bean name="user" class="com.bean.User">
<constructor-arg>
<value>小强</value>
</constructor-arg>
...
</bean>
以上内容均来自《Java Web从入门到精通》,作为自己的学习笔记,为了记录自己学习和探索的过程,仅供交流和学习。