spring简介

       Spring最根本的使命就是简化Java开发。为了降低Java开发的复杂性,spring采取了4中关键策略。

       1.基于POJO的轻量级和最小侵入性编程。

       2.通过依赖注入和面向接口实现松耦合

       3.基于切面和惯例进行声明式编程

       4.通过切面和模板减少样板式代码

       

1.基于POJO的轻量级和最小侵入性编程。

       Bean中可能会有一些对实现无用的代码,这些代码可能就是一些生命周期的方法,核心的代码可能就只有一个。通过Spring就可以去掉核心代码以外的其他代码。


2.依赖注入

      一个类要和其他类联合起来完成业务逻辑,而其他类就是这个类所依赖的对象。如果没有依赖注入,那么就要在这个类中new出所依赖的对象,而通过依赖注入,对象的依赖关系将由负责协调系统中各个对象的第三方组件在创建对象时设定。对象无需自行创建和管理它们的关系,依赖关系将被自动注入到需要它们的对象中去。

class A{//没有Spring的时候
 private B b;
 A(){
      b=new B();//B类或者B的子类,只能具体某一个类
  }
  
}
class A{//有Spring的时候
 private B b;
 A(B b){//可以传入B类或者B的子类,随便传一个。
     this.b=b;
  }
  
}
      上面这种依赖注入的方式叫做构造器注入。它没有与特定的B类进行耦合,传入的是B类型或者B类的子类也可以。这就是依赖注入的最大好处:松耦合。
<bean id="a" class="A">
    <constructor-arg ref="a"/>
</bean>
<bean id="b" class=""/>
     创建应用组件之间协作的行为叫做装配。上面就是一种装配方式。

     Spring通过应用上下文(Application Context)装配Bean的定义并把他们组装起来。Spring用过上下文全权负责对象的创建和组装。下面就是一种获取Spring上下文的方式。


ApplicationContext context = new ClassPathXmlApplicationContext("xml文件");//可以获得classpath里的xml文件上下文
A a = (A)context.getBean("bean的id");


3.应用切面

     依赖注入让相互协作的软件组件实现松耦合。而AOP把遍布应用各处的功能分离出来形成可重用的组件。

class A{
    public void getA(){
        System.out.println("A方法");
   }
}
class B{
   public void ABefore(){
           System.out.println("Abefore"); 
   }
   public void AAfter(){
           System.out.println("AAfter"); 
   }
}
Bean---B----id=b
<aop:config>
     <aop:aspect ref="b">//定义切面
            <aop:pointcut id="aa" expression="execution(* *.getA(..))"/>//切入点
            <aop:before pointcut-ref="aa" method="ABefore"/>//前置通知
            <aop:after pointcut-ref="aa" method="AAfter"/>//后置通知
     </aop:aspect>
</aop:config>


     Spring容器分为两种不同的类型:Bean工厂是最简单的容器,提供基本的DI支持。应用上下文是基于BeanFactory上创建的,并提供面向应用的服务。Bean工厂对于大多数应用来说太低级,所以应用上下文要比Bean工厂所欢迎。

1.应用上下文

     Spring有几种类型的上下文,下面是3中最有可能遇到的:

     1.ClassPathXmlApplicationContext:从类路径下的xml文件中加载上下文定义,把应用上下文定义文件当作类资源。

     2.FileSystemXmlApplicationContext:读取文件系统中的xml文件来加载上下文

     3.XmlWebApplicationContext:读取web应用下的xml文件加载上下文。

2.Bean的生命周期

     1.Spring对Bean进行实例化。

     2.Spring将值和Bean的引用注入到Bean对应的属性中。

     3.Bean如果实现了BeanNameAware接口,spring会将bean的id传给setBeanName()方法。

     4.Bean如果实现了BeanFactoryAware接口,spring调用setBeanFactory()方法,将beanFactory实例传入

     5.Bean如果实现了ApplicationContextAware接口,spring调用setApplicationContext()方法,将上下文的引用传入

     6.Bean如果实现了BeanPostProcessor接口,spring调用postProcessorBeforeInitlization()方法

     7.Bean如果实现了InitlizingBean接口,spring调用afterPropertiesSet()方法,如果Bean使用init-method,这个方法也会调用。

     8.Bean如果实现了BeanPostProcessor接口,spring调用postProcessorAfterInitlization()方法

     9.此时Bean可以使用了,他会一直在上下文中,知道上下文销毁。

     10.Bean如果实现了DisposableBean接口,spring调用destory()方法,同样的如果有destory-method,也会被调用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值