Spring介绍及相关配置
预备:JavaEE开发中的分层架构,上一层依赖于下一层,为了尽量减少依赖,尽量面向接口编程。
- 表示层:负责数据的展示。
Web层,一般都会采用MVC模式来进行开发。 - 业务逻辑层:负责应用中的业务逻辑处理
Service层,以完成业务逻辑处理为目的,方法中可以会涉及到多表的CRUD操作。 - 持久层:负责数据的存取
Dao层,方法都以完成单表的CRUD操作为目的
文章目录
一、IoC特性
- IoC(Inversion Of Control):反向控制,控制反转
DI(Dependency Injection):依赖注入 - 对象的依赖类实例不是主动去创建了,而是由IoC容器注入。
二、Spring应用的环境搭建
1. 添加spring框架的包到classpath:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- spring core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- aop -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
2. 添加spring的配置文件(applicationContext.xml,beans.xml)到classpath:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
...
</beans>
3. 支持
不能上网的情况下,要在配置文件中出提示,必须给Eclipse添加xsd的支持
windows–>preferences->myeclipse–>files and editors–> xml–>xmlcatalog
- 点击“add”,在location中选“File system”
- 然后在Spring解压目录的dist/resources目录中选择
spring-beans.xsd - 把key type改为Schema location
- key改为
http://www.springframework.org/schema/beans/spri
ng-beans.xsd
三、Spring应用的开发步骤
- 在spring的配置文件中注册要由Spring IoC容器管理的Bean:不仅管理Bean的生命周期,还管理
Bean之间的依赖关系。 - bean的配置:
<bean id="bean的唯一标识名" class="Bean类的全限定名"/>
- bean的依赖关系配置:(后面有详细介绍)
- 从spring容器中获取指定的Bean:
//创建出spring应用上下文实例
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取指定的Bean实例
Object obj = context.getBean("标识名", 类型信息对象);
四、Spring中的两种IoC容器
- BeanFactory:Bean工厂(最简单的容器)。创建和分发Bean对象,创建协作对象间的关系,参与
管理Bean的生命周期。
常用实现类:XmlBeanFactory - ApplicationContext:Spring应用上下文。
建立在BeanFactory基础之上,还提供了文本信息解析工具(对国际化的支持),载入文件资源的通用
方法,还可以向注册为监听器的Bean发送事件。- ClassPathXmlApplicationContext – 从类路径中的XML文件载入上下文定义信息。
- AnnotationConfigApplicationContext– 从注解的Java代码配置载入上下文定义信息。。
- XmlWebApplicationContext – 从web系统中的XML文件中载入上下文定义信息。
- 从IoC容器中获取Bean实例的方法:
- Xxx xxx = context.getBean(“标识名或别名”, 类型信息对象);
- Xxx xxx = (Xxx)context.getBean(“标识名或别名”);
- 如果Spring应用上下文中只配置了一次本类:
Xxx xxx = context.getBean(类型信息对象);
五、Bean的装配
1. 基本形式:
(spring3以下版本id属性值不能出现特殊字符,如/),name用于取别名。
<bean id="唯一标识名" class="类的全限定名"/>
2. 注入依赖的常用方式
1 构造器注入:对应的类中添加相应的构造方法。
<constructor-arg index="参数的位置索引值" [value="注入值" | ref="注入引用"] />
2. setter注入:建议使用。必须要有无参的构造方法,必须为需要注入的属性提供setter方法。
<property name="属性名" ref="注入引用"/>
3. 指定Bean的生存范围
默认情况,Spring容器中管理的是Bean实例是单例的。
- scope=“singleton”:默认值
- scope=“prototype”:从Spring容器中获取一次就创建一个实例
- request:在HTTP请求范围内。只有在使用具有Web能力的Spring容器时才有效
- session:HTTP Session范围。同上。
4. 指定Bean的初始化和销毁回调方法:
通过init-method,destroy-method属性来指定对应的方法。
5. 装配Bean的继承
通过parent属性来完成。
还可能通过abstract="true"来指定为抽象的。
6. 小心使用自动装配
通过auto-wire属性来完成。
可选值:byName, byType, autodetect, default
自动装配也可以配置在spring配置文件的根元素上:
<beans ... default-autowire="byName">
可以配置spring对Bean的初始化进行延迟:
<beans ... default-lazy-init="true">