Spring 2 学习笔记(一)

一,FactoryBean
   实现FactoryBean接口的bean类,在获取bean时并不是得到这个bean类的实例,而是通过这个FactoryBean的getObject方法得到实例,具体的类型由getObjectType方法返回。这种FactoryBean会被Spring自动检测并进行判断,而申明时像平时的bean那样申明,不过在定义property等属性时,则是对FactoryBean实例进行设置,而不是对生成的bean设置,认清这一点很重要。比如说常用的Spring DataSource就是一个FactoryBean。
下面是一个实例:

package  com.sanlea.study.spring2.ch03;

import  org.springframework.beans.factory.FactoryBean;

public   class  UserFactoryBean  implements  FactoryBean {
    
private  String name;
    
private  String email;

    
public   void  setName(String name) {
        
this .name  =  name;
    }

    
public   void  setEmail(String email) {
        
this .email  =  email;
    }

    @Override
    
public  Object getObject()  throws  Exception {
        User user 
=   new  User();
        user.setName(name 
+   " + " );
        user.setEmail(email 
+   " + " );
        
return  user;
    }

    @SuppressWarnings(
" unchecked " )
    @Override
    
public  Class getObjectType() {
        
return  User. class ;
    }

    @Override
    
public   boolean  isSingleton() {
        
return   true ;
    }

}

<!--  定义一个FactoryBean(实现Spring接口的Bean,比如Spring中就有一些关于DataSource的FactoryBean)  -->
    
< bean  id ="fbUserInstance"
        class
="com.sanlea.study.spring2.ch03.UserFactoryBean" >
        
<!--  这里设置的属性设置的是UserFactoryBean实例的属性,而不是UserFactoryBean实例生成的bean的属性  -->
        
< property  name ="name"  value ="mm"   />
        
< property  name ="email"  value ="[email protected]"   />
    
</ bean >

二、工厂方法创建bean
   这是利用类的工厂方法创建实例的方法,主要是兼容旧有的代码,还有一些则是必须由一个类生成另一个类的实例的方法。比如说我要实例一个JDBC Connection类,那就要进行很多的步聚,如注册驱动,设置连接相关参数等等,这些并不能直接一个new就搞定,必须要有一定的步骤才能完成,所以就能用方法进行实例化了,在Spring也支持这种方式,主要是指定factory-method属性,如果工厂是一个bean的话就要指定factory-bean了。
下面是一个实例:
package  com.sanlea.study.spring2.ch03;

public   class  StaticFactoryBean {
    
private  String name;
    
private  String comment;

    
public   void  setComment(String comment) {
        
this .comment  =  comment;
    }
    
    
public   void  print() {
        System.out.println(
" name:  "   +  name);
        System.out.println(
" comment:  "   +  comment);
    }
    
    
private  StaticFactoryBean(String name) {
        
this .name  =  name;
    }
    
    
public   static  StaticFactoryBean getInstance(String name) {
        
return   new  StaticFactoryBean(name);
    }
}

<!--  静态工厂方法创建Bean  -->
    
< bean  id ="staticFactoryBean"
        class
="com.sanlea.study.spring2.ch03.StaticFactoryBean"
        factory-method
="getInstance" >
        
< constructor-arg  value ="juggler"   />
        
< property  name ="comment"  value ="a good man, but so sad"   />
    
</ bean >

你可能感兴趣的:(Spring 2 学习笔记(一))