spring

 
Spring学习
Spring框架的由来就是为了简化企业级开发,它当中有2个技术,一个是Ioc(inversion-of-control:叫也依赖注入) 反向控制 和 Aop面向方面编程。
什么依赖注入。我们先来讨论一个简单的问题,一个汽车要从A地行驶到B地,这个问题很简单,我们可以很容易的抽象出一个模型
public class SaloonCar
{
       private String name;
       private Way way;
       public SaloonCar(String name)
{
       this.name = name;
       way = new BeijWay();
}
       public void move(){ //Way一是个路线,他表示汽车要行驶的路线
       …………………..
              way.execut();
…………………..
}
………
}
这样当我们如果我们要写一个测试用列测试move的时候会发现无论怎么测试都会间接的把way.execute方法测试了,而way又是SaloonCar在创建的时候创建,这样Salooncar和BeijWay互相耦合,Salooncar的 move方法必须依赖事先创建好的way.
 
如果我们把上面代码改写成
 public class SaloonCar
{
       private String name;
       private Way way;
 
       public SaloonCar(String name)
{
       this.name = name;
}
 
public void move()
{
       way.execute();
}
 
public void setWay(Way way)
{
       This.way = way;
}
}
 
这样way不在依靠在创建SaloonCar创建的时候创建,这样虽然还是存在着耦合,但是测试用列的时候可以事先设置我们预定的Way,还是减小了偶合。这中技术就是依赖注入。
在spring中通过BeanFactory来实现Bean的依赖注入。
现在我们来看看javabean的xml的配置
<? xml version = "1.1" encoding = "GBK" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
< beans >
    < bean id = "car" class = "com.maomao.spring.model.SaloonCar" >
       < property name = "name" >
           < value > redcar </ value >
       </ property >
< property name = "way" >
           <ref bean=” myfactorybean ” />
       </ property >
 
    </ bean >
    < bean id = "myfactorybean" class = "com.maomao.spring.model.BeijWay" / >
</beans>
 
这样我们就完成了 bean 的配置。
然后我们怎么才能根据 XML 创建实列对象呢, spring 通过 2 中方法来创建。一种是通过 BeanFactory 另外一中是通过ApplicationContext上下文来创建Bean. BeanFactory是最简单的一种创建Bean的方法,Spring给我们提供了很多实现了BeanFactory的类,其中最常用的是XmlBeanFactory
BeanFactory factory = new XmlBeanFactory(“spring.xml”);
SaloonCar car = (SaloonCar)factory.getBean(“car”);
它实列化一个类的时候是通过getBean里传递的参数去spring.xml文件中找对应的Bean,然后根据信息实列话类。
而ApplicationContext的实现类是在创建BeanFactory的时候就加载Xml文件,并且实列话类,而且ApplicationContext提供了更多的企业级开发的服务,所以一般开发中都用ApplicationContext的子类,很少用BeanFacroy。以上就是Ioc技术。(xml配置细节网上N多文章)。
注意:<!DOCTYPE  beans  PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
这段话必须要加,因为Spring 会验证文档的完整性
 
现在我们来讲讲Spring中的一些特殊的bean.
第1个,对Bean进行后处理。(请自己查阅Bean的生命周期,这个比较重要)
Spring为我们提供了两次机会,让我们切入到Bean的生命周期中,检查或者修改它的配置,这叫做后处理。在Bean被创建以及在装配以后,org.springframework.beans.factory.config.BeanPostProcessor;接口为你提供了两次机会来修改这个Bean
这个接口有2个方法 postProcessAfterInitialization (Object bean, String beanName)
通过实现这个接口可以修改Bean的信息,在这里就不做举列了。装载的时候用
ApplicationContext的子类装载。
 
第2 BeanFactoryPostProcessor在Bean工厂载入所有的Bean的定义以后,实列话Bean之前,对Bean工厂做一写后处理的工作
public class MpBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
 
 
       public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0)
                     throws BeansException {
              System.out.println(arg0.getBeanDefinitionCount());
              String[] name = arg0.getBeanDefinitionNames();
              for(String x:name)
              {
                     System.out.println(x);
              }
       }
      
}
 
ApplicationContext加载完所有的定义以后,实列化Bean的时候会调用这个类。
 
还有分散和定制属性编辑器等
<!--                  自定制类型转换                 -->
    < bean id = "editor" class = "org.springframework.beans.factory.config.CustomEditorConfigurer" >
       < property name = "customEditors" >
           < map >
              < entry key = "com.maomao.spring.model.MyType" >
                  < bean id = "mytypeeditor" class = "com.maomao.spring.model.MyTypeEditor" />
              </ entry >
           </ map >
       </ property >
    </ bean >
    <!--                        end               -->
    <!--                      连接外部文件                -->
    < bean id = "property" class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
       < property name = "location" >
           < value > com/maomao/spring/xml/outspring.properties </ value >
       </ property >
    </ bean >
    <!--    
以上 Bean 里的类都是 Spring 里提供实现了特殊接口的类。
 
还有BeanNameAware,BeanFactoryAware,ApplicationContextAware,这些都比较简单,自己看网上查下吧。。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值