发表于: 2017-08-14 22:51:08
2 991
今天完成的事情:
看了一下Spring的内容:
Spring的DI(依赖注入)
1 Spring Bean装配的三种方式:
自动化装配bean
通过JavaConfig装配
通过XML文件装配
2 自动化装配bean
组件扫描(component scanning)
自动装配(autowiring)
@Component:组件声明
@ComponentScan:组件扫描
( XML的方式:<context:component-scan> )
@ContextConfiguration:
@Autowired:自动装配
为组件扫描的bean命名的几种方式:
Spring默认将类名第一个字母小写作为bean的ID
将ID作为值传递给@Component,如:Component("beanname")
使用Java依赖注入规范中的 @Named设置ID,如:@Named("beanname")
设置组件扫描的包(@ComponentScan):
单包:@ComponentScan("packagename")或@ComponentScan(basePackages = "packagename")
多包:@ComponentScan(basePackages = {"package1","package2",...})
指定包中的类或接口:@ComponentScan(basePackageClasses = {xxx.class , xxxx.class , ....})
自动装配:
@Autowired:自动装配,可用于构造函数,setter方法,非setter属性方法
@Autowired(required = false):不提示未配置的bean的异常
@Inject:自动装配,Java依赖注入规范,与@Autowired差不多
3 通过Java代码(JavaConfig)装配bean
@Configuration:声明这个类为配置类
@Bean:声明简单bean。默认beanID为带@Bean的方法名,也可通过@Bean(name= " ")指定ID
借助JavaConfig实现注入的例子:
引用创建bean的方法
请求一个JavaConfig类作为参数(构造器)
setter方法
注意:带有@Bean的方法可以通过任何必要的Java功能来产生bean实例
4 通过XML文件装配Bean:
创建XML配置文件,以<beans>为根
声明Bean:<bean id = " " class = " " />
4.1 借助构造器注入初始化bean(强依赖)的两种方式:
<constructor-arg>
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
4.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,包含值或引用
5 导入和混合配置:
在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" />
明天打算做的事情:
复习一下Java的基础语法
遇到的问题:
收获:
评论