发表于: 2017-04-21 21:10:22
3 1476
今天完成的事情:详细理解了Spring框架中DI(依赖注入)的相关知识,以下是部分知识总结:
Spring Bean装配的三种方式:所谓的装配我的理解就是先将组件进行扫描,然后对需要的bean进行创建并送到需要的地方。
1.自动化装配bean
2.通过JavaConfig装配
3.通过XML文件装配
1. 自动化装配bean
组件扫描(component scanning) 自动装配(autowiring)
@Component:组件声明 @ComponentScan:组件扫描 ( XML的方式:<context:component-scan> )
@ContextConfiguration:
@Autowired:自动装配
为组件扫描的bean命名的几种方式:
1. Spring默认将类名第一个字母小写作为bean的ID
2. 将ID作为值传递给@Component,如:Component("beanname")
3. 使用Java依赖注入规范中的 @Named设置ID,如:@Named("beanname")
设置组件扫描的包(@ComponentScan):
1. 单包:@ComponentScan("packagename")或@ComponentScan(basePackages = "packagename")
2. 多包:@ComponentScan(basePackages = {"package1","package2",...})
3. 指定包中的类或接口:@ComponentScan(basePackageClasses = {xxx.class , xxxx.class , ....})
自动装配:
@Autowired:自动装配,可用于构造函数,setter方法,非setter属性方法
@Autowired(required = false):不提示未配置的bean的异常
@Inject:自动装配,Java依赖注入规范,与@Autowired差不多
2. 通过Java代码(JavaConfig)装配bean
@Configuration:声明这个类为配置类
@Bean:声明简单bean。默认beanID为带@Bean的方法名,也可通过@Bean(name= " ")指定ID
借助JavaConfig实现注入的例子:
1. 引用创建bean的方法
2. 请求一个JavaConfig类作为参数(构造器)
3. setter方法
注意:带有@Bean的方法可以通过任何必要的Java功能来产生bean实例
3. 通过XML文件装配Bean:
创建XML配置文件,以<beans>为根,声明Bean:<bean id = " " class = " " />
3.1借助构造器注入初始化bean(强依赖)的两种方式:
1. <constructor-arg>
2. c-命名空间
<constructor-arg>:
<constructor-arg ref = " " />
<constructor-arg vlaue = " ">
<constructor-arg>
<list>
<ref bean=" "/>
<ref bean=" "/>
</list>
</constructor-arg>
c-命名空间(Spring3.0引入):
在XML顶部声明:xmlns:c = "http://www.springframework.org/schema/c"
<bean id = " " class = " " c:cd-ref = " " /> 或 c:_0-ref = " " />
“c:”:前缀 “cd”:构造器参数名 “-ref”:注入bean引用 “" "”:要注入的beanID
3.2 设置属性注入(可选依赖):
<property>属性:
@Autowired
public void setXXX (... , ...) { ... }
<bean id = " " class = " " />
<property name = " " ref = " " />
</bean>
<property name = " "/>
<list>
<value> </value>
<value> </value>
</list>
</property>
<property> 与 <constructor-arg>对应 ,p-命名空间 与 c-命名空间对应
p-命名空间: 在XMML中声明:xmlns:p = "http://www.springframework.org/schema/p"
p:XXX-ref = " "
“p:”:前缀 “XXX”:属性名 “-ref”:注入bean应用 “" "”:所注入的beanID
不能使用p-命名空间来装配集合,但能使用util-命名空间中的<util:list>元素创建列表bean: 先在XML中声明:xmlnd:util="http://www/springframework.org/schema/util"
<util:list id = " ">
<value> </value>
<value> </value>
</util:list>
Spring util-命名空间中的元素:
<util:constant>:引用某个类型的public static域,并将其暴露为bean
<util:list>:创建java.util.List类型的bean,包含值或引用
<util:map>:创建java.util.Map类型的bean,包含值或引用
<util:properties>:创建java.util.Properties类型的bean,包含值或引用
<util:property-path>:引用一个bean的属性,并将其暴露为bean
<util:set>:创建java.util.Set类型的bean,包含值或引用
4 导入和混合配置:
在JavaConfig中引用XML配置:
拆分JavaConfig: - @Import(xxx.class) 或 @Import({xxx1.class,xxx2.class}) - @ImoprtResource("CLASSPATH:XXXX.xml")
在XML配置中引用JavaConfig:
<bean class = "xxx.config" /> 或者使用第三个配置文件: <import resorce = "xxxx.xml" />
明天打算做的事情:学习Spring Bean的高级配置,对这两天学习的关于Spring依赖注入的相关知识进行代码Demo整理总结
遇到的问题:在实际开发中,这三种装配方式哪一种比较常用
收获:对Spring的DI有了更加深入的理解,当然还需要大量的代码练习去熟悉
评论