4种注入方式
1 //采用这种方式( ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");)仅限于是没有启动服务器的方式才会采用这种方式((例如在spring项目中))如果服务器启动就不用这种方式获取了,因为如果是springmvc中,在dispatcherservlet init方法中会直接加载spring.xml 文件,web.xml 文件等等,会把bean直接加载到容器中
例如在spring.xml 当中的配置如下
<bean id="prdService" class="com.it.service.ProductServiceImpl">
<property name="productDao" ref="productDao" >
</property>
</bean>
<bean id="productDao" class="com.it.dao.ProductDaoImpl">
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
ProductService service=(ProductService) context.getBean("prdService");
System.out.println(service.getAllProductInfos());
System.out.println(service.getProductInfoById(3));
2 第二种方式
applicationContext.xml
<bean id="prdService" class="com.it.service.ProductServiceImpl">
<property name="productDao" ref="productDao" >
</property>
</bean>
<bean id="productDao" class="com.it.dao.ProductDaoImpl">
private ProductDao productDao;
public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}
3 或者采用
applicationContext.xml
<bean id="prdService" class="com.it.service.ProductServiceImpl">
<property name="productDao" ref="productDao" >
</property>
</bean>
<bean id="productDao" class="com.it.dao.ProductDaoImpl">
@resource
private ProductDao productDao;
采用注解的方式实际上就是代替了 set方法
public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}
4 直接注入
//这种写法就不用再
IBaseService docService = (IBaseService) SpringBeanUtil
.getBean("prdService");
因为这种情况下是已经类已经加载到spring容器中了,直接获取就好了
/**
* 根据名称获取spring的bean
*
* @param beanName
* @return spring的业务对象(service),在安全模式下,由于部分Service|Dao没有加载,所以可能返回null
*/
public static Object getBean(String beanName) {
if (applicationContext == null)
return null;
WebApplicationContext wac = (WebApplicationContext)applicationContext;
try{
return wac.getBean(beanName);
}catch(BeansException be){
String mode = String.valueOf(wac.getServletContext().getInitParameter("pluginMode"));
if("safe".equalsIgnoreCase(mode)){
//安全模式下,允许某些类找不到
return null;
}else{
throw new RuntimeException(be);
}
}
}