spring学习

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

生成bean,向构造器参数【argExp】传入id为【beanIdExp2】的bean对象。(ref部分表示传入的是一个引用。) 向构造器的第0个参数传入id为【beanIdExp2】的bean对象。 在构造器只有一个参数的情况下,向构造器的参数传入id为【beanIdExp2】的bean对象。

将字面量注入到构造器中:



使用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

与c命名空间类似,【beanNameExp】部分用于指定成员变量的名字,【-ref】用于表示注入的是一个引用。 将字面量注入到setter方法中: 使用vaue为property注入字面量。(property也可以接受这样的子元素来接收List类型的对象。) 与c命名空间相同,去掉【-ref】标志表示注入的是一个字面量而非引用。

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,只是负责将其它配置组合起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值