spring学习(二)—bean的装配

1.在xml中显示配置的方式

1.1构造方法注入

  定义一个构造器:

public Roles(int id,String roleName,User user){
     this.id=id;
     this.roleName=roleName;
     this.user=user;    
}

public User(int id,String name){
     this.id=id;
     this.name=name;
}

  spring的配置文件:

<bean id="roles" class="com.lyx.model.Roles">  
    <constructor-arg value="0"/>  
    <constructor-arg value="管理员"/> 
    <constructor-arg ref="user"/> 
</bean>

<bean id="user" class="com.lyx.model.User">
     <constructor-arg value="1"/>
     <constructor-arg value="li"/>
</bean>

  测试:

ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");  
        Roles u = (Roles)context.getBean("roles");

1.2setter方法注入

<bean id="roles" class="com.lyx.model.Roles">  
    <property name="id" value="0"/>  
    <property name="roleName" value="管理员"/> 
    <property name="user" ref="user"/> 
</bean>

<bean id="user" class="com.lyx.model.User">
     <property name="id" value="1"/>
     <property name="name" value="li"/>
</bean>

当注入是其他类型

 1 <bean id="user" class="com.lyx.model.User">
 2       <property name="name" value="li"/>
 3       <property name="list">
 4             <list>
 5                   <value>a<value>
 6                   <value>b<value>
 7             </list>
 8             <!-- 如果传入是数组,则跟list一样 -->
 9             <!-- 如果传入set集合,只需把list标签换成set。-->
10             <!-- map集合的注入 -->
11             <property name="map">
12                   <map>
13                         <entry key="key1" value="map1"></entry>
14                         <entry key="key2" value="map2"></entry>
15                   </map>
16             </property>
17        </property>
18 </bean>

 

1.3接口注入

  接口注入方式现在不提倡,基本处于退役状态。因为它强制注入对象实现不必要的接口,带有侵入性。被注入对象如果想要IOC Service Provider为其注入对象,就必须实现某个接口。这个接口提供一个方法,用来为其注入依赖对象。IoC Service Provider最终通过这些接口来了解应该为被注入对象注入什么依赖对象。

1.4两种注入方法的比较

1.4.1 构造方法注入

  优点:对象在构造完成之后,即已经进入就绪状态,可以马上使用。缺点:通过反射构造对象的时候,对相同类型的参数的处理比较麻烦,维护和使用上也比较麻烦。构造方法无法被继承,无法设置默认值。而且参数的变动可能造成维护上的困难。

1.4.2setter方法注入

  优点:setter方法可以被继承,可以设置默认值,而且有良好的IDE支持。缺点:对象构造完成后无法马上进入就绪状态。

2.在java中进行显示配置

  首先,在spring的配置文件启用注解:

<context:component-scan base-package="com.lyx" /> 

  创建配置类,如:

@Configuration
public class DBConfiguration{

   @Bean(name = "dataSource")  
    public DataSource dataSource() {  
        BasicDataSource dataSource = new BasicDataSource();  
        dataSource.setDriverClassName(driverClassName);  
        dataSource.setUrl(driverUrl);  
        dataSource.setUsername(driverUsername);  
        dataSource.setPassword(driverPassword);  
        return dataSource;  
    }  
  
    @Bean  
    public PlatformTransactionManager transactionManager() {  
        return new DataSourceTransactionManager(dataSource());  
    }   
}

其中@Configuration注解相当与XML配置文件中的<beans>标签,@Bean相当于<bean>标签。@Bean注解name属性默认名就是方法名,返回值是bean对象。使用@Bean注解的方法不能是private、final或static的。

测试方法:

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(DBConfiguration.class);  
        Assert.assertEquals(dataSource, ctx.getBean("dataSource"));

 

posted on 2018-01-28 12:01  dfsgfsgsg  阅读(209)  评论(0)    收藏  举报

导航