Spring3.0 – 学习笔记 – Bean装配

Spring3.0 – 学习笔记 – Bean装配

------转载请注明出处  作者:小魔头

1.Spring bean 配置:

a.自动化隐式装配

b.Java config 显示装配

c.XML 显示装配

 

2.自动化隐式装配:

a.@Component 添加于定义的类前,Spring根据此注解去创建该类实例并注册到spring容器中

i.默认beanID为首字母小写的类名

ii.显示配置beanID -- @Component(“beanID”)

b.@Autowired 添加于成员属性或者成员方法或构造方法前,spring会根据该注解从容器中配置bean并且注入到该属性或者方法的参数传入

i.Spring首先根据成员属性或者参数的类型名搜索匹配的bean,无匹配对应时根据beanID进行配置

扫描二维码关注公众号,回复: 384552 查看本文章

例子:当成员属性或者参数是接口时,但是bean的实例化对象是接口的实现类,则无法进行名称匹配,转以beanID进行配置

ii.自动装配的配置不仅限于@Component生成的, javaconfig和xml生成的bean同样可以进行自动装配

iii.强依赖使用构造器注入,弱依赖使用属性注入

c.组件扫描 -- 通过XML 配置<context:component-scan base-package = “ ”/> 启动spring自动扫描功能,a和b 项才能正常加载

d.组件扫描 – 或者通过javaconfig 同样可以启动组件扫描功能,代码如下:

 

@Configuration
@ComponentScan
Public class beansConfig(){
}
 

e.设置基本扫描包

@ComponentScan(basePackages={“com.package1”, “com.package2”})
@ComponentScan(basePackageClasses={“Bullet.class”, “Gun.class”})//以类所在的包围基本包进行扫描

 

3.Javaconfig 显示装配:

a.创建一个beanConfig 配置类 如下:

 

@Configuration
Public class beansConfig(){
  @Bean
  Public Bullet setBullet(){
    Return new Bullet();
  }
 
  @Bean
  Public Gun getGun(){
    Return new Gun(setBullet());//Gun必须有一个参数的构造方法
  }
}
 

i.Config代码中通过new bean的实例对象 来达到 和(@Component&@ComponentScan)一样的作用,实例化bean到spring容器中,以上方式这两个有依赖关系的类必须在同一javaconfig类中,所以这种方式不推荐使用

ii.beanID默认是方法名, 可以使用@Bean(name=””)显示声明

iii.注入到容器中的bullet和gun的bean

b.创建另外另外一个javaconfig 如下:

@Configuration
Public class beansConfig(){
  @Bean
  Public Bullet setBullet(){
     Return new Bullet();
  }
 
  @Bean
  Public Gun getGun(Bullet bullet){
    Return new Gun(bullet);//Gun必须有一个参数的构造方法
  }
}

 

i.注入到Gun中bullet实例可以是javaconfig/@Component/XML 生产的bean, 甚至Gun 实例bean的装配都可以是在另外一个javaconfig 类中

 

4.XML 显示装配:

a.在xml文件中使用如下配置进行声明bean,spring会实例化并且加载到容器

<bean id=”bullet” class =”com.package1.Gun”/>

<bean id=”bullet” class =”com.package1.Bullet”/>

b.构造器注入依赖

i.构造器注入实例bean, class类必须有相应的构造器

<bean id=”gun” class =”com.package1.Gun”>

<constructor-arg ref=”bullet”/>

</bean>

使用<beans xmlns:c=”http:www.springframework.or/schema/c” 代替如下:

<bean id=”gun” class =”com.package1.Gun”>

<c:cd-ref=”bullet”/>

</bean>

ii.构造器注入字符

<bean id=”gun” class =”com.package1.Gun”>

<constructor-value=”shoot”/>

</bean>

iii.构造器注入集合

<bean id=”gun” class =”com.package1.Gun”>

<constructor-arg>

<list>

<ref bean=”bullet”/>

</list>

<constructor-arg/>

</bean>

c.属性注入

i.注入bean,class类中必须有对应的get和set方法(如果没有使用@autowired注入或者javaconfig)

<bean id=”gun” class =”com.package1.Gun”>

<property name=”bullet” ref=”bullet”/>

</bean>

ii.注入字符和集合 

<bean id=”gun” class =”com.package1.Gun”>

<property name=”bullet” value=”shoot”>

<property name=”bulletList”>

<list><value>shoot you</value></list>

</property name=”bullet”>

</bean>

d.多个xmlbeans文件使用<import resource="config/beans.xml"/>引入依赖注入beans

 

5.混合装配

a.和上面多个xmlbeans 使用<import resource/>类似,

i.多个javaconfig 配置类时需要使用@Import(dependentcyConfig.class)

ii.或者创建一个总体配置类@Import({Config1.class,Config2.class})

b.如果需要在javaconfig配置类中注入在xml中配置的bean时,使用@ImportResource(“classpath:beans.xml”)

c.如果xml中配置的bean需要注入javaconfig配置类中bean,通过如下引用

<bean class=”dependentcyConfig.class”>

                  

                                                                                                                                                                                                                                                                                           

                                                                                                                                                                                                                                                                                        

 

 

 

 

 

 

猜你喜欢

转载自lyf-email.iteye.com/blog/2315966