疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Spring三种实例化Bean方法、注解


 

 Spring三种实例化Bean方法、注解

 
首先通过一个简单的程序学习Spring在程序中的运用。
 
定义一个接口:
 
package com.spring.interfacebean; 
 
public interface PersonBean 
   void show(); 
}
 来自CODE的代码片
snippet_file_0.txt
这个接口的实现类:
 
package com.spring.implbean; 
import com.spring.interfacebean.PersonBean; 
 
public class UserBean implements PersonBean 
 
   public void show() 
   { 
       System.out.println("Hello world"); 
   } 
}
 来自CODE的代码片
snippet_file_0.txt
Spring配置的xml代码:
 
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
   ......
   <bean id="userBean" class="com.spring.implbean.UserBean" /> 
</beans>
 来自CODE的代码片
snippet_file_0.txt
写一个测试类,调用上述程序实现功能:
 
package com.spring.test; 
 
import org.junit.Test; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import com.spring.interfacebean.PersonBean; 
public class TestClass 
    @Test 
    public void testMethod() throws Exception 
    { 
       //读取配置文件 
        ApplicationContext ctx=new ClassPathXmlApplicationContext
 
("applicationContext.xml"); 
        //获取UserBean的实例 
       PersonBean bean=(PersonBean)ctx.getBean("userBean"); 
       //调用方法 
       bean.show(); 
    } 
}
 来自CODE的代码片
snippet_file_0.txt
该程序是通过实例化bean的方法来实现功能。在Spring中对bean的实例化有三种方法。
1,使用类构造器实例化对象
 
2,使用静态工厂的方法实例化对象
 
3,使用实例工厂的方法实例化对象
 
三种实例化对象的代码如下所示:
 
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
 ......
       <!-- 使用类构造器直接实例化 -->   
        <bean id="userBean1" class="com.spring.implbean.UserBean" /> 
       <!-- 使用静态工厂的方法实例化 --> 
       <bean id="userBean2" class="com.spring.factory.BeanFactory" factory-
 
method="UserBeanService" /> 
       <!-- 使用实例工厂方法实例化 --> 
       <bean id="factory" class="com.spring.factory.BeanFactory" /> 
       <bean id="userBean3" factory-bean="factory" factory-
 
method="getUserBeanService" /> 
</beans>  
 来自CODE的代码片
snippet_file_0.txt
BeanFactory类的代码如下所示:
 
package com.spring.factory; 
 
import com.szy.spring.implbean.UserBean; 
import com.szy.spring.interfacebean.PersonBean; 
 
public class BeanFactory 
    //使用静态工厂的方法实例化使用 
   public static PersonBean UserBeanService() 
   { 
        return new UserBean(); 
    } 
    
   public PersonBean getUserBeanService() 
   { 
       return new UserBean(); 
    } 
}  
 来自CODE的代码片
snippet_file_0.txt
 
在Spring中的注解:
 
@Service :用于标注配置业务层(service层)组件
 
@Cotroller:用于标注配置控制层组件
 
@Reponsitory:用于标注一般的DAO层Bean对象
 
@Component:泛指组件,对一般不好归入以上三种中的一种是使用
 
Spring的自动装配:
 
自动装配是指不用显示的手动配置java Bean之间的依赖关系,而是让Spring依据某种规则自动将合适的对象注入目标对象中。Spring中常用@Autowire和@Resource进行自动装配。
 
@Autowire:默认是按照对象的数据类型进行自动装配
 
@Autowire
 
private UserDao userDao;
 
Spring框架会自动将类型为UserDao的对象注入进来。
 
@Resource:默认是按照名称或者ID进行自动装配,只有找不到匹配的名称或者ID时才按照类型进项装配
 
@Resource(name="userDao")
 
private UserDao userDao;
 
Spring框架在运行时会根据名称或者ID为“userDao”的对象注入进来。