spring笔记:
1、spring的应用上下文类型:
FileSystemXmlApplicationContext:从文件系统中加载应用上下文。
例:
ApplicationContext context = new FileSystemXmlApplicationContext(“c:/knight.xml”);
ClassPathXmlAppicationContext: 从类路径中加载应用上下文。
例:
AppilcationContext context = new ClassPathXmlApplicationContext(“knight.xml”);
XmlWebAppilcationContext: 从Web应用下的一个或多个xml文件中加载应用上下文。
2、spring都包括哪些jar包?
面向切面编程
spring-aop-x.x.x.RELEASE.jar
spring-aspects-x.x.x.RELEASE.jar
spring核心容器
spring-beans-x.x.x.RELEASE.jar
spring-context-x.x.x.RELEASE.jar
spring-context-support-x.x.x.RELEASE.jar
sping-core-x.x.x.RELEASE.jar
spring-expression-x.x.x.RELEASE.jar
Instrumentation
spring-instrument-x.x.x.RELEASE.jar
spring-instrument-tomcat-x.x.x.RELEASE.jar
数据访问与集成
spring-jdbc-x.x.x.RELEASE.jar
spring-jms-x.x.x.RELEASE.jar
spring-messaging-x.x.x.RELEASE.jar
spring-orm-x.x.x.RELEASE.jar
测试
spring-test-x.x.x.RELEASE.jar
spring-tx-x.x.x-RELEASE.jar
web与远程调用
spring-web-x.x.x.RELEASE.jar
spring-webmvc-x.x.x.RELEASE.jar
spring-webmvc-portlet-x.x.x.RELEASE.jar
spring-websocket-x.x.x.RELEASE.jar
3、spring配置的可选方案
在xml中进行显式配置。
在Java中进行显式配置。
隐式的bean发现机制和自动装配。
3.1、自动化装配bean
spring使用以下两个功能实现自动化装配:
(1)组件扫描(component scanning):spring会自动发现需要创建的bean;
(2)自动装配(autowiring):spring自动满足bean之间的依赖。
组件扫描
@Component:表示该类是组件类,spring要为这个类创建bean。默认ID为类名首字母小写。
@ComponentScan:启用spring组件扫描,默认会扫描与配置类相同的包。
(xml启动组件扫描:context:component-scan,使用时记得为元素添加context对应的属性。)
@Component(“beanNameExp”):指定bean的ID为【beanNameExp】。
@ComponentScan(“basePackageExp”):指定扫描的基础包为【basePackageExp】。
@ComponentScan(basePackages=“basePackageExp”):指定扫描的基础包为【basePackageExp】。
@ComponentScan(basePackages={“basePackageExp1”, “basePackageExp2”}):指定扫描的基础包为【basePackageExp1】和【basePackageExp2】。
@ComponentScan(basePackageClasses={beanClassExp1.class, beanClassExp2.class}):指定扫描的基础包为【beanClassExp1】和【beanClassExp2】所在的包。
自动装配
@Autowired:用于构造器,setter方法和其它方法上。用于自动为组件注入属性值。
@Autowired(required=false):当spring找不到匹配的bean时,不会抛出异常。
注意:如果多个bean都能满足依赖时,spring会抛出一个异常。
3.2、通过Java代码(JavaConfig)装配bean。
@Configuration:表明这个类是一个配置类,用于包括spring上下文如何创建bean的细节。
@Bean:用于一个创建bean的方法上,方法体中定义了生成bean对象的逻辑,bean的ID默认为方法的名字。
如果bean对象有需要注入的属性,可以使用传参的形式,spring会自动传入对应的bean。
@Bean(name=“beanNameExp”):指定bean对象的ID。
3.3、通过xml文件装配bean。
:生成类为【com.exp.BeanClassExp】的对象。ID为com.exp.BeanClassExp#0,其中#0用来对相同类的bean使用计数形式来命名。
:生成bean对象,并且指定ID为【beanIdExp】。
<1>借助构造器来装配bean。
第一种方法:使用元素
生成一个id为beanIdExp的bean,并使用其构造器为它的成员变量注入id为【beanIdExp2】的bean。
第二种方法:使用c命名空间
首先为根元素添加如下属性:
xmlns:c=“http://www.springframework.org/schema/c”
将字面量注入到构造器中:
使用value属性,将一个字面量注入到构造器中。
c命名空间将-ref去掉,表示将字面量而非引用注入到构造器。
将null注入到构造器中:
将List注入到构造器中:
stringExp
stringExp2
<2>使用setter方法注入属性。
第一种方法:使用标签。
<property name=“beanNameExp” ref=“beanIdExp2” / >
使用beanIdExp的setter方法为变量名为【beanNameExp】的成员变量注入id为【beanIdExp2】的bean。
第二种方法:使用p命名空间。
首先为根元素添加一下属性:
xmlns:p=“http://www.springframework.org/schema/p”
util命名空间:
util命名空间可以把其他类型的对象,在xml文件中配置为bean。
util命名空间有一下标签:
util:constant
util:list
util:map
util:properties
util:property-path
util:set
2.5 导入和混合配置
2.5.1 在JavaConfig中引用Xml配置
如果有两个JavaConfig文件
在@Configuration注解下添加@Import(JavaConfigClass2.class)
为当前JavaConfig类引入JavaConfigClass2类,这样两个配置类中的bean可以引用。
或者建立一个第三方类
在@Configuration注解下添加@Import({JavaConfigClass1.class, JavaConfigClass2.class})
为当前JavaConfig类引入JavaConfigClass1类和JavaConfigClass2类。
在@Configuration注解下添加@ImportResource(“classpath:springConfigExp.xml”)
为当前JavaConfig类引入springConfigExp.xml的配置。这个注解和@Import不冲突,可以同时使用。
2.5.2 在Xml配置中引用JavaConfig
为当前配置文件引入名为springConfigExp2.xml的文件。<bean class=“com.exp.JavaConfigExp” / >
为当前配置文件引入JavaConfigExp类。(这是一个普通的bean,但同时也是一个JavaConfig配置。)
2.5.3
一种比较好的方式,是不论项目中使用JavaConfig还是使用Xml进行装配。
创建一个根配置是一种很好的做法。根配置中不声明任何bean,只是负责将其它配置组合起来。